Compare commits

..

2,636 commits

Author SHA1 Message Date
Stephan I. Böttcher
0c1d46eadb Merge branch 'main' into slowudev 2025-04-14 14:49:01 +02:00
stefanrueger
118625e18b
Fix misleding error message 2025-04-08 15:03:17 +02:00
stefanrueger
14bfbd472e
Update NEWS 2025-03-24 15:08:45 +01:00
Stefan Rueger
c29f8d130b
Merge pull request #1965 from stefanrueger/usbdevs
Remove #include "usbdevs.h" from libavrdude.h
2025-03-24 15:01:15 +01:00
Stefan Rueger
774fbc865e
Merge pull request #1964 from stefanrueger/32sdnn
Remove spurious s from AVR32SDnn part id
2025-03-24 15:00:17 +01:00
Stefan Rueger
c25ac0240c
Merge pull request #1963 from stefanrueger/wdttypes
Add WDT type info to avrintel.c
2025-03-24 15:00:04 +01:00
Stefan Rueger
904b775164
Merge pull request #1962 from stefanrueger/version
Add --version option
2025-03-24 14:59:48 +01:00
Stefan Rueger
58343dc82f
Merge pull request #1959 from MX682X/main
Add PK Basic programmer
2025-03-24 14:59:26 +01:00
Stefan Rueger
c409db37ff
Merge pull request #1958 from stefanrueger/variants
Fix variant errors introduced in recent .atdf versions
2025-03-24 14:37:37 +01:00
MX682X
65360f2f04 remove trailing spaces 2025-03-23 12:05:48 +01:00
MX682X
b2669af9a5 Improved error messaging, added the other PIDs to usbdevs.h 2025-03-23 12:03:41 +01:00
stefanrueger
bd49b1e366
Align USB vendor and device IDs 2025-03-22 17:04:47 +01:00
stefanrueger
b2cd4bdbad
Modify spacing for canonical avrdude.conf.in 2025-03-22 17:01:23 +01:00
MX682X
0467739ef7 small adjustments 2025-03-22 10:47:53 +01:00
stefanrueger
43f3b45561
Remove #include "usbdevs.h" from libavrdude.h 2025-03-22 01:27:15 +01:00
stefanrueger
e3eb9b391f
Remove spurious s from AVR32SDnn part id 2025-03-22 01:01:13 +01:00
stefanrueger
58dbe15f3f
Add WDT type info to avrintel.c 2025-03-22 00:42:39 +01:00
stefanrueger
fb70539f6a
Add --version option 2025-03-22 00:26:04 +01:00
MX682X
3bf7b0d4a1 changing pickit5 config to a parent based style 2025-03-15 11:09:37 +01:00
MX682X
eb2fe9b64e updated scripts.xml and added PK Basic in non cimsis-dap mode 2025-03-13 19:01:04 +01:00
stefanrueger
3234adf332
Fix variant errors introduced in recent .atdf versions 2025-03-13 10:57:55 +01:00
stefanrueger
8c4b69ac47
Update NEWS 2025-03-11 13:58:39 +01:00
stefanrueger
09c80c6da9
Update avrdude.pdf 2025-03-11 13:57:51 +01:00
stefanrueger
baca7500a7
Fix typo in comment 2025-03-11 13:50:27 +01:00
Stefan Rueger
b88dab9174
Merge pull request #1955 from stefanrueger/AVR32SDnn
- Add AVR64DAnnS, AVR32DAnnS and AVR32SDnn to avrdude.conf
 - Fix m808/9 and m1608/9 entries in avrdude.conf
 - Clarify and rename common .avrdx/.avrex parent parts
 - Add port and UART info to avrintel.c
2025-03-11 13:29:40 +01:00
Stefan Rueger
dfd6af952e
Merge pull request #1947 from MCUdude/pic-avr-fix
Suggest compatible command when SNAP/PICKit4 in PIC mode is detected
2025-03-11 13:23:16 +01:00
stefanrueger
42a93499c8
Change AVRnnSDmm's hvupdi_variant to 3 2025-03-11 13:05:59 +01:00
stefanrueger
28812a5057
Correctly parent m808/9 and m1608/9 off from avr8x_mega
This changes family_id	to "megaAVR" and hvupdi_variant	to 1.
2025-03-11 13:02:15 +01:00
stefanrueger
2c22535f41
Clarify and rename common .avrdx/.avrdx parent parts
This commit leaves the settings of true parts unchanged. One can verify this by

 # Before this commit
 $ avrdude -p*/At | sort > /tmp/At

 # After this commit
 avrdude -p*/At | sort | diff - /tmp/At | grep -vi common.values
2025-03-11 12:24:16 +01:00
stefanrueger
39ac5e88b3
Self-document hvupdi_variant 2025-03-11 11:17:50 +01:00
stefanrueger
a10911d427
Add port info to avrintel.c 2025-03-11 01:25:07 +01:00
Hans
7fcd7830cb
Optimization and tweaks based on feedback from PR #1947 2025-03-04 11:22:46 +01:00
stefanrueger
6eb5e1d8ba
Fix typo in help message 2025-02-28 16:05:45 +01:00
stefanrueger
1dafcfd003
Add AVR32SDnn to avrdude.conf 2025-02-28 15:08:49 +01:00
stefanrueger
75c4a76879
Add browsave and crcboot config values 2025-02-28 15:07:46 +01:00
stefanrueger
c4ac9a7efa
Add AVR32nnS to avrdude.conf 2025-02-28 13:07:23 +01:00
stefanrueger
9ead829c12
Add AVR64nnS to avrdude.conf 2025-02-28 12:59:19 +01:00
stefanrueger
2229be9777
Update variants in avrdude.conf from ATDF files 2025-02-28 12:30:41 +01:00
stefanrueger
bdbb57a213
Update avrintel from ATDF files 2025-02-28 12:29:58 +01:00
stefanrueger
5ca2b7b9e7
Add UART info to avrintel.c 2025-02-28 00:57:07 +01:00
stefanrueger
b861ccc1d1
Update NEWS 2025-02-20 14:22:16 +01:00
Stefan Rueger
f7dadea395
Merge pull request #1951 from stefanrueger/shorten-lgt
Shorten ID of LGT parts
2025-02-20 14:19:38 +01:00
Stefan Rueger
3846c0e7e4
Merge pull request #1950 from stefanrueger/shorten-ata
Shorten ID of ATA parts
2025-02-20 14:19:24 +01:00
Stefan Rueger
fbed31ac62
Merge pull request #1949 from stefanrueger/pickit5-type
Correct PICkit5 programmer type entries
2025-02-20 14:19:07 +01:00
Stefan Rueger
a3f19d9d4c
Merge pull request #1948 from MCUdude/docs-badge
Add docs and release badges to README
2025-02-20 14:18:46 +01:00
Stefan Rueger
3f0a8a5955
Merge pull request #1936 from ndim/add-long-options-using-getopt_long
Add long options like --part
2025-02-20 14:18:21 +01:00
stefanrueger
5068f3793b
Shorten ID of LGT parts 2025-02-12 17:16:34 +01:00
stefanrueger
2276a14db2
Shorten ID of ATA parts 2025-02-12 16:52:45 +01:00
stefanrueger
b8493a76be
Align comment 2025-02-12 16:50:28 +01:00
stefanrueger
162da033c7
Correct PICkit5 programmer type entries 2025-02-12 16:38:24 +01:00
MCUdude
fdb76f38a6 Add more options to the content index list 2025-02-12 12:55:36 +01:00
MCUdude
0c2c03f13f Rename --test and --noverify to --test-memory and -d --noverify-memory 2025-02-12 10:16:36 +01:00
MCUdude
0528a3e8af partno -> partname 2025-02-12 10:12:29 +01:00
MCUdude
4bb18b78ad Add missing bitclock argument 2025-02-12 10:07:17 +01:00
MCUdude
29a0dd7a90 Remove duplicate USB flags 2025-02-10 22:24:00 +01:00
Hans
1430f9e904
Remove blank lines 2025-02-10 10:35:35 +01:00
Hans
c5300b80cd
Add docs and release badges to README 2025-02-10 10:33:10 +01:00
MCUdude
a525058d07 Use libhidapi for connecting to SNAP/PICKit4 in AVR mode 2025-02-09 09:16:44 +01:00
Hans
6ba504441a
Add longopts to texinfo document 2025-02-07 22:20:09 +01:00
MCUdude
2b0eced1d0 Add longopts to manpage 2025-02-07 14:12:05 +01:00
MCUdude
19b2519f16 Use --quell instead of --quiet 2025-02-07 13:14:49 +01:00
MCUdude
d7de4e6ce3 Add missing long opt in help text
+ remove duplicates
2025-02-07 12:49:10 +01:00
MCUdude
6c23fccf42 Print alternative PIC mode pickit5 programmer option 2025-02-06 23:24:29 +01:00
MCUdude
f1204ab99c Fix issue where Avrdude would print -p (null) if no part was specified 2025-02-06 22:39:13 +01:00
stefanrueger
7668a1f056
Update NEWS 2025-02-05 19:07:55 +01:00
Stefan Rueger
abd9e4dc50
Merge pull request #1941 from lazka/add-missing-stdlib-include
Fix missing stdlib.h include for free()
2025-02-05 18:52:13 +01:00
Stefan Rueger
54c5071128
Merge pull request #1939 from stefanrueger/linuxspi-start
Ensure part is up for some 100 ms before resetting it
2025-02-05 18:49:34 +01:00
Stefan Rueger
0771b7fc22
Merge pull request #1935 from MX682X/8.1.0---isp
PICKit5 ISP, dW, TPI, JTAG and PDI support
2025-02-05 18:46:12 +01:00
Stefan Rueger
648608d97b
Merge pull request #1945 from dl8dtl/fix_github_upload_artifact
Fix GitHub upload artifact
2025-02-05 18:16:35 +01:00
MX682X
f2f2ac4035 fix message output 2025-02-01 22:31:26 +01:00
Joerg Wunsch
cb651b67c5 In arduino_packing.yml, distinguish OS and architecture
upload-artifacts@v4 complains if the same artifact already
exists, so chose a different name for each OS+arch.
2025-01-30 23:16:18 +01:00
Joerg Wunsch
02279df9a2 More replacements of upload-artifacts@v3 by @v4 2025-01-30 23:16:18 +01:00
Joerg Wunsch
97508a1f0d Use upload-artifact@v4
Version 3 has been deprecated and is no longer supported.
2025-01-30 23:16:18 +01:00
MX682X
93856138a3 try to improve error handling on a failed data transmission plus some minor adjustments and fixes 2025-01-18 20:22:28 +01:00
Christoph Reiter
bca9fff70a Fix missing stdlib.h include for free()
Building avrdude with current clang+mingw-w64 for arm64 on Windows
leads to the following error:
serbb_win32.c:294:3: error: call to undeclared library function 'free' with type 'void (void *)'

Explicitely import stdlib.h for free() in avrdude.h
where mmt_free() is defind to free() to fix this.

Fixes #1940
2025-01-14 20:28:52 +01:00
MX682X
29438a2bd5 fixed old jtag flash writes, updated scripts, included EC family 2025-01-13 20:52:52 +01:00
stefanrueger
713241f990
Ensure part is up for some 100 ms before resetting it 2025-01-06 20:08:36 +01:00
MX682X
26b5fdf218 fixed a small bug on handling the clock options 2024-12-22 09:54:32 +01:00
MX682X
0d554e70b9 overwriting flash size to 256 on attiny15 and co. 2024-12-21 19:31:53 +01:00
MX682X
7725f19ad1 cleanup, remove flash size overwrite, fix regression on updi fuse writes. 2024-12-21 16:32:26 +01:00
MX682X
e36a8f05dc another attempt to fix attiny15, improved debug messages 2024-12-18 23:39:47 +01:00
MX682X
8aa795be04 added experemental -xf= option to override flash size on isp 2024-12-16 23:41:44 +01:00
stefanrueger
f1555aefb3
Update NEWS 2024-12-13 14:45:16 +01:00
Stefan Rueger
d732f7419a
Merge pull request #1937 from alexjx/main
Fix avrdoper header sequence for hidusb
2024-12-13 14:38:15 +01:00
Jia Xin
42d9cc43e8 fix avrdoper after 6.4 2024-12-10 22:21:51 +08:00
MX682X
e09370f1fa small fix for prodsig retrieval 2024-11-29 23:24:48 +01:00
MX682X
f916ba39f6 experiment for attiny15 plus other stuff 2024-11-29 22:25:41 +01:00
Hans Ulrich Niedermann
818e0e8698 Add long options like --part
Switch the command line argument parser from getopt(3) to
getopt_long(3) and add a few long options as aliases to existing
short options, e.g. "--help" and "--part" being aliases for "-?"
and "-p", respectively.

The getopt_long(3) function is available on GNU, BSD, and the existing
msvc/getopt.[ch] already implements getopt_long() on Windows. This
should cover all systems avrdude supports.

Adapt the avrdude usage message shown by "-?" or "--help" to show the
new long options.

TODO: Adapt man page and texi manual reflecting the long options.

Closes: #1922
2024-11-27 02:44:17 +01:00
MX682X
ae867081d5 rework prodsig retrival logic 2024-11-26 20:46:45 +01:00
MX682X
7d82e58791 fixing prodsig on isp and jtag and other improvements 2024-11-25 23:45:45 +01:00
Stefan Rueger
69c3293ff0
Update NEWS 2024-11-25 12:39:14 +00:00
Stefan Rueger
ca606af331
Fix typo 2024-11-25 12:38:50 +00:00
Stefan Rueger
22efe4f5e5
Merge pull request #1933 from stefanrueger/xmega-fuses
Fix ATxmega fuses memory sizes
2024-11-25 12:23:40 +00:00
Stefan Rueger
36fee42826
Merge pull request #1932 from stefanrueger/avr32ebxx
Add AVR32EBxx parts
2024-11-25 12:17:32 +00:00
Stefan Rueger
7bbf06ee14
Merge pull request #1916 from ndim/document-elf2tag
Document elf2tag script
2024-11-25 12:13:23 +00:00
MX682X
fbffbf7a1a fixing build for ARM64 (no bswap) 2024-11-23 23:18:56 +01:00
MX682X
3b364545c8
Merge branch 'avrdudes:main' into 8.1.0---isp 2024-11-23 22:58:58 +01:00
MX682X
02dc472932 fixing up docs 2024-11-23 22:58:07 +01:00
MX682X
74a6e8ac56 a little optimization 2024-11-23 22:30:21 +01:00
MX682X
7b077029bc add support for dW, JTAG, ISP, and PDI (untested)
dW has some hiccups on flash writes
JTAG must erase chip before overwriting EEPROM
2024-11-23 22:10:17 +01:00
mcuee
eec1a9b2e4
Update NEWS 2024-11-23 21:08:05 +08:00
Hans Ulrich Niedermann
f85a584067 ci: Check consistency of generated files
This makes the .github/workflows/check-sourcecode
more a "check-repo" than a "check-sourcecode".
2024-11-23 03:31:51 +01:00
Hans Ulrich Niedermann
eddb0d0ed5 Add basic elf2tag(1) manpage
Add basic elf2tag(1) manpage using asciidoc/asciidoctor.

To update the elf2tag.1 file from elf2tag.1.adoc, run
the update-elf2tag-manpage script.

No CI or buildsystem or git precommit hook integration yet.
2024-11-23 03:31:06 +01:00
mcuee
5c0d478703
Merge pull request #1934 from ndim/enable-option-checking=fatal
CI: Ensure only supported configure options are used (--enable-option-checking=fatal)
2024-11-23 09:09:53 +08:00
Hans Ulrich Niedermann
172474a9e9 ci: Abort autotools builds in case of unsupported options
Abort autotools CI builds in case we give them an unsupported
option. The default is to only warn, but the CI should catch
mistakes.
2024-11-23 01:40:24 +01:00
Hans Ulrich Niedermann
b8594d1df1 ci: Fix macos brew install issue with pkg-config
The macos build's "brew install" command has developed a
build failure without us being involved at all:

    Error: The `brew link` step did not complete successfully
    The formula built, but is not symlinked into /opt/homebrew
    Could not symlink bin/pkg-config
    Target /opt/homebrew/bin/pkg-config
    is a symlink belonging to pkg-config@0.29.2. You can unlink it:
      brew unlink pkg-config@0.29.2

This makes the macos build work again and implements the suggestions
brew prints when installing bison and flex, regarding PATH, LDFLAGS,
and CPPFLAGS.
2024-11-23 01:40:04 +01:00
Hans Ulrich Niedermann
79e091b545 ci: Use multi-line format to invoke configure
Use the multi-line format to invoke configure with a long command line.

This prepares for even longer command lines.
2024-11-22 20:11:29 +01:00
Hans Ulrich Niedermann
2f6bd67a52 elf2tag: Add -h and --help arguments 2024-11-20 16:33:31 +01:00
Stefan Rueger
d7e5b43824
Update avrintel files 2024-11-16 23:09:19 +00:00
Stefan Rueger
f6efda5fe7
Add AVR32EB* parts 2024-11-16 23:01:15 +00:00
Stefan Rueger
985726039b
Fix ATxmega fuses memory sizes 2024-11-16 10:19:26 +00:00
mcuee
0b92721af9
Merge pull request #1927 from ndim/add-extra-version-information
Add extra version information to avrdude output
2024-10-10 20:56:45 +08:00
Hans Ulrich Niedermann
cb53a34ff1 Add extra version information to avrdude output
Some downstream projects build avrdude and want to add their
own version information to the avrdude version to distinguish
their builds from others.

This adds a clean way to do that without needing to patch the
avrdude sources, for both cmake and automake based builds:

    cmake -DEXTRA_VERSION:STRING=-arduino.1-rc1
    ../configure EXTRA_VERSION=-arduino.1-rc1

After building avrdude, the last line of "avrdude -?" will now
look similar to the following, depending on whether you are
building an avrdude git checkout or an avrdude release tarball:

    avrdude version 8.0-20240901-arduino.1-rc1 (30e19f23), https://github.com/avrdudes/avrdude
    avrdude version 8.1-arduino.1-rc1 (30e19f23), https://github.com/avrdudes/avrdude
2024-10-10 13:40:22 +02:00
Stefan Rueger
30e19f2332
Update NEWS 2024-09-01 01:21:45 +01:00
Stefan Rueger
0f0b4c15ce
Increment libavrdude version
There is bound to be a library change in git main until v8.1 is published;
ensure we have a new version number in preparation for the next release.
2024-09-01 01:20:34 +01:00
Stefan Rueger
d3c4f8631c
Merge pull request #1919 from stefanrueger/m16u4
Update usbpids in avrdude.conf
2024-09-01 01:14:44 +01:00
Stefan Rueger
f1cfb81313
Merge pull request #1918 from stefanrueger/da-s
Add AVR128DAxxS parts
2024-09-01 01:14:05 +01:00
Stefan Rueger
af22f60c8f
Remove uspid of ATxmegas without USB interface 2024-09-01 00:58:02 +01:00
Stefan Rueger
13e5af1b3c
Add memory pdicfg to AVR128DAnnS 2024-08-31 18:00:15 +01:00
Stefan Rueger
b3949ce685
Correcting usbpid of x64a4u 2024-08-31 17:37:39 +01:00
Stefan Rueger
d54782e9a7
Update usbpids in avrdude.conf 2024-08-31 13:00:07 +01:00
Stefan Rueger
a0a2ec8926
Add AVR128DAxxS parts 2024-08-31 10:44:30 +01:00
Stefan Rueger
4fa07e563f
Update NEWS 2024-08-24 22:23:30 +01:00
Stefan Rueger
d8c8cf1379
Update version to 8.0 2024-08-24 21:51:00 +01:00
Stefan Rueger
943ee419b6
Update NEWS 2024-08-24 19:14:15 +01:00
Stefan Rueger
821d5b0ad1
Merge pull request #1911 from stefanrueger/jtagmkII
Iron out some problems in jtagmkII
2024-08-24 19:11:25 +01:00
Stefan Rueger
ac5c4b9ccd
Merge pull request #1910 from ndim/guard-against-zombie-problems
Add checks for zombie sourcecode problems
2024-08-24 19:10:45 +01:00
Stefan Rueger
706336c40c
Merge pull request #1888 from ndim/ci-test-running-built-avrdude
CI: test running the built avrdude executable
2024-08-24 19:10:08 +01:00
Stefan Rueger
ca6e0793f5
Merge pull request #1874 from ndim/parport-build-test
Parport build test
2024-08-24 19:09:51 +01:00
Stefan Rueger
19279e33f8
Fix flash paged r/w for jtagmkII
There were several problems with page_erase():
  - Read cache not invalidated on writes to boot and apptable
  - PDI apptable and boot memories paged access can get addresses wrong
2024-08-24 18:04:18 +01:00
Stefan Rueger
0c463fad92
Fix page erase for jtagmkII
There were several problems with page_erase():
 - Not working on UPDI eeprom/usersig memories: write a page of 0xff instead
 - Read cache not invalidated on page erase
 - PDI apptable and boot memories page erase possibly erases wrong page
2024-08-24 17:56:41 +01:00
Stefan Rueger
93b512de70
Change memory category for classic page erase in jtag3.c 2024-08-24 17:47:00 +01:00
Hans Ulrich Niedermann
c677974137 ci: Where possible, dryrun tests on uninstalled avrdude
This tries running the uninstalled avrdude executable, both
with -? and for test-avrdude.

Tests on installed avrdude are kept where they exist,
but not added for all possible platforms.

Quick table showing

  * -? testing of built avrdude (print the usage)
  * dryrun testing of built avrdude before installation
  * installation of avrdude
  * dryrun testing of installed avrdude

and whether that happens/succeeds/fails:

                              run    test              test
                               -?    built   install   installed
    linux-x86_64-autotools  | yes  | succ  | yes     | succ
    linux-x86_64            | yes  | succ  | yes     | succ
    linux (cross-compile)   | yes# | n/a   | no      | <--
    macos-x86_64            | yes  | succ  | no      | <--
    macos-x86_64-autotools  | yes  | succ  | no      | <--
    msvc                    | yes* | succ  | broken  | <--
    mingw                   | yes  | fail  | no      | <--

 # Only on i386, as the armhf and arm64 executables are not runnable
   on the ubuntu-latest x86_64 worker.

 * Works on x86 and x64. Skipped on arm64 at this time.

   The arm64 executable is not runnable, possibly due to the
   old problem of an exe being built for the wrong architecture
   (which @mcuee mentioned somewhere).

In summary, this should run as much as is possible at this time
without introducing failures.

In the future, after these failures are fixed, more tests can be
added for a more complete coverage.
2024-08-24 18:46:03 +02:00
Stefan Rueger
b407731473
Refrain from using page_erase on -U eeprom:w 2024-08-24 17:43:37 +01:00
Hans Ulrich Niedermann
415b397bc9 ci: Use ${{env.BUILD_TYPE}} instead of hardcoded value 2024-08-24 18:36:57 +02:00
Hans Ulrich Niedermann
06032113cf ci: Run test-avrdude with -v to show avrdude output on errors 2024-08-24 18:36:57 +02:00
Hans Ulrich Niedermann
184b00db48 ci: disable distcheck (until am doc builds have been fixed)
The doc builds are a bit brittle at this time, and therefore
do not work reliably with "make distcheck".

Therefore this comments out "make distcheck" until the am doc
builds have been fixed.
2024-08-24 18:36:57 +02:00
Hans Ulrich Niedermann
6e2152f1b9 ci: Use printf(1) to avoid echo(1) problems
Use printf(1) to avoid possible echo(1) incompatibilities like
special escape sequences and the like.

Also, "\n\n" means two linefeeds, without any implicit linefeeds
being added.

Thought for the future: Perhaps test-avrdude should run isatty()
and, if it is not a TTY, not wait for linefeeds at all in the non-
interactive case?
2024-08-24 18:35:08 +02:00
Hans Ulrich Niedermann
fb74e288da ci: consistently rename macos -autotools build
Use the same suffix string "-autotools" for "macos-x86_64-autotools"
which the linux-x86_64-autotools build already uses.
2024-08-24 16:12:00 +02:00
Hans Ulrich Niedermann
16d7d0bbcb ci: Build parallel port code on supported systems
Build parallel port code on supported systems

Unsupported systems are:

  * Windows operating system
  * MacOS operating system

This means the CI can test

  * native Linux builds (yes, even for arm systems)

Untested at this time are the BSDs.

Removes the dysfunctional Windows (since Windows XP)  parallel port code,
and has the buildsystems fail Windows builds if parallel port builds are
requested (HAVE_PARPORT or --enable-parport).

https://github.com/avrdudes/avrdude/pull/1874#issuecomment-2275762550
2024-08-24 15:38:17 +02:00
Hans Ulrich Niedermann
89478179b4 function prototype consistency fix for ppiwin.c
mingw builds for Windows require a function prototype fix.
2024-08-24 15:37:04 +02:00
Hans Ulrich Niedermann
548c871194 Fix all remaining #include "ac_cfg.h" to use <ac_cfg.h> 2024-08-24 15:03:42 +02:00
Hans Ulrich Niedermann
5176d7b818 Add checks for zombie sourcecode problems
This adds checks for zombie sourcecode problems, i.e. problems
we have tried to eliminate but which might be or have been
resurrected.

The example check is for the problematic

    #include "ac_cfg.h"

with double quotes instead of <> which were identified as a
problem in https://github.com/avrdudes/avrdude/issues/1706
and then fixed.
2024-08-24 15:03:42 +02:00
Stefan Rueger
9e9825c988
Update NEWS/docu 2024-08-24 01:27:36 +01:00
Stefan Rueger
5f32f9d8c9
Merge pull request #1909 from stefanrueger/warnings
Silence compiler warnings
2024-08-24 00:57:12 +01:00
Stefan Rueger
5ab90751d1
Merge pull request #1908 from stefanrueger/documentation
Improve Documentation
2024-08-24 00:56:02 +01:00
Stefan Rueger
53cf5f29ee
Merge pull request #1907 from stefanrueger/familyid
Improve messaging around locked UPDI parts
2024-08-24 00:54:26 +01:00
Stefan Rueger
5b1b5443c6
Merge pull request #1906 from funkeleinhorn/serprog-programmer
Remove known limitations comment from serprog.c
2024-08-24 00:53:31 +01:00
Stefan Rueger
43fc4ff81f
Silence compiler warnings 2024-08-23 23:30:08 +01:00
Stefan Rueger
78464340f2
Update comment in avdude.pdf 2024-08-23 23:25:25 +01:00
Stefan Rueger
ceef6d7df2
Merge branch 'documentation' of github.com:stefanrueger/avrdude into documentation 2024-08-23 23:22:34 +01:00
Stefan Rueger
a9c692ed71
Remove section about memories from avrdude.1
This section breaks the flow of the man page on the options.
It is reasonable to refer to a longer manual for that.
2024-08-23 23:17:46 +01:00
Stefan Rueger
3e9672481c
Reduce use of upload/download terms 2024-08-23 23:16:39 +01:00
Stefan Rueger
ae31a6bb5f
Create avrstats.texi for statistics used in the docu 2024-08-23 23:09:27 +01:00
Stefan Rueger
173c3d4e90
Improve messaging around locked UPDI parts 2024-08-23 22:02:49 +01:00
Stefan Rueger
371dc3823d
Remove section about memories from avrdude.1 2024-08-23 21:49:57 +01:00
Stefan Rueger
97cc672fcb
Reduce use of upload/download terms 2024-08-23 20:57:29 +01:00
Funkeleinhorn
8fdd0c7277
Remove known limitations comment from serprog.c
Connecting over tcp is already possible by specifying net:<host>:<port>
as a port. Performance is already good and further improvements would
require custom AVR read/write logic to batch operations which seems
not worth the maintenance effort for now.
2024-08-23 19:35:06 +02:00
Stefan Rueger
79f85d048f
Update NEWS 2024-08-23 02:27:33 +01:00
Stefan Rueger
284612f875
Merge pull request #1897 from stefanrueger/avr_write_byte_default
Fix avr_write_byte()
2024-08-23 02:21:23 +01:00
Stefan Rueger
720d21fec0
Merge pull request #1903 from stefanrueger/test8-e
Add -e exe option to test8
2024-08-23 02:20:34 +01:00
Stefan Rueger
2cd9e5b8d4
Merge pull request #1901 from mcuee/windows_arm64_build
Update build.yml to re-enable Windows on ARM64 MSVC build
2024-08-23 02:19:44 +01:00
Stefan Rueger
5c16beeffb
Remove bmequ() macro 2024-08-23 02:18:37 +01:00
Stefan Rueger
ab66d35516
Merge pull request #1896 from stefanrueger/fix-deprecated-types
Fix deprecated types in libavrdude.i
2024-08-23 02:12:07 +01:00
Stefan Rueger
422b3784e2
Merge pull request #1902 from mcuee/document
Document: use macOS to replace MacOS, no support of Parallel Port under macOS
2024-08-23 02:09:48 +01:00
Stefan Rueger
42589c02eb
Merge pull request #1895 from stefanrueger/avrdude.pdf
Add detail to part and programmer lists in avrdude.pdf
2024-08-23 02:09:09 +01:00
Stefan Rueger
13879ba8b4
Move list of memories into an appendix 2024-08-23 01:56:05 +01:00
Stefan Rueger
b7d690b04a
Change @samp{option} to @code{option} 2024-08-23 00:47:16 +01:00
Stefan Rueger
79109b4f6b
Remove multiple -x help explanations 2024-08-23 00:41:04 +01:00
Stefan Rueger
ffb9b8c001
Update introduction of avrdude.pdf 2024-08-23 00:17:19 +01:00
Stefan Rueger
5613de5a69
Add @cindex terms for programmers 2024-08-22 23:15:09 +01:00
Stefan Rueger
d1667f705f
Refine programmer listing for avrdude.pdf 2024-08-22 23:14:30 +01:00
Stefan Rueger
c1433c9fc4
Fix .sed file dependencies in src/doc/Makefile.am 2024-08-22 20:11:42 +01:00
Stefan Rueger
7a6cfab35f
Add Wiki urls for Appendix B 2024-08-22 18:50:27 +01:00
Stefan Rueger
b389e8b89f
Add -e exe option to test8 2024-08-22 17:43:37 +01:00
mcuee
0b397b0b15
Document: avrdude does not support Parallel Port under macOS 2024-08-22 17:32:17 +08:00
mcuee
a0c0e4872e
Document: use macOS to replace MacOS in document 2024-08-22 17:29:59 +08:00
mcuee
ce0dbc453d
Update build.yml to re-enable Windows on ARM64 MSVC build 2024-08-22 17:07:14 +08:00
Stefan Rueger
a6e927a31e
Fix avr_write_byte() 2024-08-22 02:00:42 +01:00
Stefan Rueger
325170c94c
Fix deprecated types in libavrdude.i 2024-08-22 01:54:06 +01:00
Stefan Rueger
1774b09ec1
Merge branch 'avrdude.pdf' of github.com:stefanrueger/avrdude into avrdude.pdf 2024-08-22 01:46:37 +01:00
Stefan Rueger
a503e09208
Show more detail for the programmer list in avrdude.pdf 2024-08-22 01:45:50 +01:00
Stefan Rueger
5453843848
Show more detail for -c\? programmer descriptions 2024-08-22 01:03:05 +01:00
Stefan Rueger
b0e117b802
Shorten some programmer descriptions 2024-08-22 01:01:58 +01:00
mcuee
a9594622e2
Document: remove one more place where Windows parallel ports are mentioned 2024-08-22 07:42:12 +08:00
mcuee
138bd514f1
Document: AVRDUDE does not support parallel ports on Windows
Adopted the document change of PR #1874.
2024-08-22 07:31:42 +08:00
mcuee
aff15d3721
Document: remove the mentioning of 16bit Windows system directory 2024-08-22 07:28:47 +08:00
Stefan Rueger
dc1191a7b3
Merge branch 'avrdude.pdf' of github.com:stefanrueger/avrdude into avrdude.pdf 2024-08-21 23:49:57 +01:00
Stefan Rueger
c6d29a1689
Move debug command line line after opening the log file 2024-08-21 23:26:51 +01:00
Stefan Rueger
b49fe93402
Enlarge set of special shell characters 2024-08-21 23:25:36 +01:00
Stefan Rueger
50662bb852
Show command line with -vvv 2024-08-21 17:06:23 +01:00
Stefan Rueger
da4de26c5f
Provide str_quote_bash() and str_ccsharg() 2024-08-21 17:05:43 +01:00
Stefan Rueger
e740dc19ef
Add debug statements for avr_...() I/O functions 2024-08-21 16:06:06 +01:00
Stefan Rueger
cdc0b9f0d8
Provide str_ccaddress() 2024-08-21 15:59:52 +01:00
Stefan Rueger
03fd7cf93d
Remove no longer needed parts.cmake 2024-08-21 01:10:07 +01:00
Stefan Rueger
92258e205e
Show more detail for the part list in avrdude.pdf 2024-08-21 01:06:20 +01:00
Stefan Rueger
b8e5c3a927
Show more detail for -p ? 2024-08-21 01:04:36 +01:00
Stefan Rueger
7219f5f529
Crisp up programmer descriptions 2024-08-20 00:37:42 +01:00
Stefan Rueger
596a4a8ac9
Crisp up programmer type descriptions 2024-08-19 23:18:44 +01:00
Stefan Rueger
8aa01a4054
Add cindex terms 2024-08-19 22:35:59 +01:00
Stefan Rueger
1fe0857e7f
Update NEWS 2024-08-19 21:30:45 +01:00
Stefan Rueger
81d15b5058
Merge pull request #1893 from stefanrueger/space-the-final-frontier
Space: the final frontier

Reformatting most of the source: The created avrdude executable stays invariant except for the source line numbers that errors and warnings emit with -vv. To prove this check out git main, replace all occurrences of __LINE__ in avrdude.h and jtagmkII.c with 07654321. Compile the executable avrdude and disassemble using objdump -d $(which avrdude) >ad.S. Then do the same with this PR and convince yourself that the ensuing .S files are identical. OK, I only checked under Linux but have every reason to believe that the semi-automated method of this PR will also leave the fraction of the code invariant that isn't seen by a Linux compilation.

Tools used:

$ indent -as -nsaf -nsai -nsaw -nut -bap -bacc -bad -bbb -brs -nbc -br -brf -nbs -c33 -cd33 -cp33 -ncdb -cdw -ce -ci2 -cli0 -d0 -di1 -neei -nfc1 -i2 -il-2 -ppi0 -nip -l130 -lc130 -nlp -npcs -npsl -nsc -sob -nlps -nprs -par

Then polish with a set of sed scripts to ensure the correct spacing of
  - switch(i)
  - a? b: c
  - type *p
  - single-line comments just so // Note the space and capital letter at the start and
  - Multi-line comments such as
    /*
     * Multi-line comments which
     *  - Tend to be about larger code regions
     *  - Contain vital algorithmic information
     *  - Deserve visual attention and prominence
     *  - Help users utilise functions and code thereafter
     */

Also 
  - Change PDATA(pgm)-> to my.
  - Change xxx->prog_modes & PM_ABCD to is_abcd(xxx)
2024-08-19 21:23:45 +01:00
Stefan Rueger
de2b5bba89
Pass -a additional parameters also when prepping part 2024-08-19 20:45:22 +01:00
Stefan Rueger
00422f3f29
Change xxx->prog_modes & PM_ABCD to is_abcd(xxx) 2024-08-18 16:25:34 +01:00
Stefan Rueger
6d6b0fa861
Replace PDATA(pgm)-> with my. 2024-08-18 15:56:29 +01:00
Stefan Rueger
347ca085c3
Change spacing around parentheses 2024-08-18 15:29:52 +01:00
Stefan Rueger
8f73bc4b1a
Remove unnecessary breaks 2024-08-18 02:26:56 +01:00
Stefan Rueger
1113b641fd
Reformat spacing/comments in src/xbee.h 2024-08-18 01:54:37 +01:00
Stefan Rueger
94fa54663e
Reformat spacing/comments in src/xbee.c 2024-08-18 01:54:37 +01:00
Stefan Rueger
59a58b77fb
Reformat spacing/comments in src/wiring.h 2024-08-18 01:54:37 +01:00
Stefan Rueger
a8ee4d010f
Reformat spacing/comments in src/wiring.c 2024-08-18 01:54:36 +01:00
Stefan Rueger
2cd6209dba
Reformat spacing/comments in src/whereami.h 2024-08-18 01:54:36 +01:00
Stefan Rueger
a4f6cb8c75
Reformat spacing/comments in src/whereami.c 2024-08-18 01:54:36 +01:00
Stefan Rueger
1f32f6260e
Reformat spacing/comments in src/usbtiny.h 2024-08-18 01:54:36 +01:00
Stefan Rueger
7e76388fe9
Reformat spacing/comments in src/usbtiny.c 2024-08-18 01:54:35 +01:00
Stefan Rueger
ce5a8289ac
Reformat spacing/comments in src/usbdevs.h 2024-08-18 01:54:35 +01:00
Stefan Rueger
43845fa344
Reformat spacing/comments in src/usbasp.h 2024-08-18 01:54:35 +01:00
Stefan Rueger
0e269536da
Reformat spacing/comments in src/usbasp.c 2024-08-18 01:54:35 +01:00
Stefan Rueger
3fefc9027a
Reformat spacing/comments in src/usb_libusb.c 2024-08-18 01:54:34 +01:00
Stefan Rueger
ca1a5879a8
Reformat spacing/comments in src/usb_hidapi.c 2024-08-18 01:54:34 +01:00
Stefan Rueger
e16286b976
Reformat spacing/comments in src/urclock_private.h 2024-08-18 01:54:34 +01:00
Stefan Rueger
8e4474058a
Reformat spacing/comments in src/urclock.c 2024-08-18 01:54:34 +01:00
Stefan Rueger
c25105064b
Reformat spacing/comments in src/updi_state.h 2024-08-18 01:54:33 +01:00
Stefan Rueger
8e76d31f44
Reformat spacing/comments in src/updi_state.c 2024-08-18 01:54:33 +01:00
Stefan Rueger
09ddba79ab
Reformat spacing/comments in src/updi_readwrite.h 2024-08-18 01:54:33 +01:00
Stefan Rueger
1798e82f72
Reformat spacing/comments in src/updi_readwrite.c 2024-08-18 01:54:32 +01:00
Stefan Rueger
baeb1c00b7
Reformat spacing/comments in src/updi_nvm_v5.h 2024-08-18 01:54:32 +01:00
Stefan Rueger
5d661e6fa2
Reformat spacing/comments in src/updi_nvm_v5.c 2024-08-18 01:54:32 +01:00
Stefan Rueger
9abfb74167
Reformat spacing/comments in src/updi_nvm_v4.h 2024-08-18 01:54:32 +01:00
Stefan Rueger
19494c199d
Reformat spacing/comments in src/updi_nvm_v4.c 2024-08-18 01:54:31 +01:00
Stefan Rueger
5014fcd9b2
Reformat spacing/comments in src/updi_nvm_v3.h 2024-08-18 01:54:31 +01:00
Stefan Rueger
cda18ab6aa
Reformat spacing/comments in src/updi_nvm_v3.c 2024-08-18 01:54:31 +01:00
Stefan Rueger
763e809743
Reformat spacing/comments in src/updi_nvm_v2.h 2024-08-18 01:54:31 +01:00
Stefan Rueger
51b36dad2a
Reformat spacing/comments in src/updi_nvm_v2.c 2024-08-18 01:54:30 +01:00
Stefan Rueger
9ab4e7524c
Reformat spacing/comments in src/updi_nvm_v0.h 2024-08-18 01:54:30 +01:00
Stefan Rueger
5b4543c865
Reformat spacing/comments in src/updi_nvm_v0.c 2024-08-18 01:54:30 +01:00
Stefan Rueger
5f4c0d764f
Reformat spacing/comments in src/updi_nvm.h 2024-08-18 01:54:30 +01:00
Stefan Rueger
526017304d
Reformat spacing/comments in src/updi_nvm.c 2024-08-18 01:54:29 +01:00
Stefan Rueger
a175a8b24d
Reformat spacing/comments in src/updi_link.h 2024-08-18 01:54:29 +01:00
Stefan Rueger
4f88ce6c6b
Reformat spacing/comments in src/updi_link.c 2024-08-18 01:54:29 +01:00
Stefan Rueger
7e57daaca3
Reformat spacing/comments in src/updi_constants.h 2024-08-18 01:54:29 +01:00
Stefan Rueger
71dc2569fe
Reformat spacing/comments in src/update.c 2024-08-18 01:54:28 +01:00
Stefan Rueger
94ee50e484
Reformat spacing/comments in src/tpi.h 2024-08-18 01:54:28 +01:00
Stefan Rueger
d52547a0d4
Reformat spacing/comments in src/term.c 2024-08-18 01:54:28 +01:00
Stefan Rueger
61ad681781
Reformat spacing/comments in src/teensy.h 2024-08-18 01:54:28 +01:00
Stefan Rueger
c8093f74cd
Reformat spacing/comments in src/teensy.c 2024-08-18 01:54:27 +01:00
Stefan Rueger
61df966924
Reformat spacing/comments in src/strutil.c 2024-08-18 01:54:27 +01:00
Stefan Rueger
3b6bda561d
Reformat spacing/comments in src/stk500v2_private.h 2024-08-18 01:54:27 +01:00
Stefan Rueger
f4de09a0a2
Reformat spacing/comments in src/stk500v2.h 2024-08-18 01:54:26 +01:00
Stefan Rueger
b4f46771e7
Reformat spacing/comments in src/stk500v2.c 2024-08-18 01:54:26 +01:00
Stefan Rueger
f04110b511
Reformat spacing/comments in src/stk500generic.h 2024-08-18 01:54:26 +01:00
Stefan Rueger
af18a76b00
Reformat spacing/comments in src/stk500generic.c 2024-08-18 01:54:26 +01:00
Stefan Rueger
fcb3931b75
Reformat spacing/comments in src/stk500_private.h 2024-08-18 01:54:25 +01:00
Stefan Rueger
2e1eb959ef
Reformat spacing/comments in src/stk500.h 2024-08-18 01:54:25 +01:00
Stefan Rueger
0cfdad898c
Reformat spacing/comments in src/stk500.c 2024-08-18 01:54:25 +01:00
Stefan Rueger
8440d2dc85
Reformat spacing/comments in src/solaris_ecpp.h 2024-08-18 01:54:25 +01:00
Stefan Rueger
709382c33b
Reformat spacing/comments in src/serprog.h 2024-08-18 01:54:24 +01:00
Stefan Rueger
eef0c655ac
Reformat spacing/comments in src/serprog.c 2024-08-18 01:54:24 +01:00
Stefan Rueger
34331b4090
Reformat spacing/comments in src/serialupdi.h 2024-08-18 01:54:24 +01:00
Stefan Rueger
eef9ff758b
Reformat spacing/comments in src/serialupdi.c 2024-08-18 01:54:24 +01:00
Stefan Rueger
d48940cbdc
Reformat spacing/comments in src/serialadapter.c 2024-08-18 01:54:23 +01:00
Stefan Rueger
aced881c47
Reformat spacing/comments in src/serbb_win32.c 2024-08-18 01:54:23 +01:00
Stefan Rueger
3760a13eee
Reformat spacing/comments in src/serbb_posix.c 2024-08-18 01:54:23 +01:00
Stefan Rueger
9b4db1bdc3
Reformat spacing/comments in src/serbb.h 2024-08-18 01:54:23 +01:00
Stefan Rueger
b15ca8c24d
Reformat spacing/comments in src/ser_win32.c 2024-08-18 01:54:22 +01:00
Stefan Rueger
6c97ad9a6b
Reformat spacing/comments in src/ser_posix.c 2024-08-18 01:54:22 +01:00
Stefan Rueger
0d422ed45d
Reformat spacing/comments in src/ser_avrdoper.c 2024-08-18 01:54:22 +01:00
Stefan Rueger
1fc4b0556c
Reformat spacing/comments in src/ppiwin.c 2024-08-18 01:54:22 +01:00
Stefan Rueger
388b55528b
Reformat spacing/comments in src/ppi.h 2024-08-18 01:54:21 +01:00
Stefan Rueger
6f8758a37e
Reformat spacing/comments in src/ppi.c 2024-08-18 01:54:21 +01:00
Stefan Rueger
68aa300a9f
Reformat spacing/comments in src/pindefs.c 2024-08-18 01:54:21 +01:00
Stefan Rueger
4971347834
Reformat spacing/comments in src/pickit2.h 2024-08-18 01:54:20 +01:00
Stefan Rueger
0eb0d60b49
Reformat spacing/comments in src/pickit2.c 2024-08-18 01:54:20 +01:00
Stefan Rueger
7f2a7f3dc2
Reformat spacing/comments in src/pgm_type.c 2024-08-18 01:54:20 +01:00
Stefan Rueger
724b73f6eb
Reformat spacing/comments in src/pgm.c 2024-08-18 01:54:20 +01:00
Stefan Rueger
5aa7855947
Reformat spacing/comments in src/par.h 2024-08-18 01:54:19 +01:00
Stefan Rueger
f867427c1f
Reformat spacing/comments in src/par.c 2024-08-18 01:54:19 +01:00
Stefan Rueger
eaf6d0f7b6
Reformat spacing/comments in src/micronucleus.h 2024-08-18 01:54:19 +01:00
Stefan Rueger
d7b03eafd6
Reformat spacing/comments in src/micronucleus.c 2024-08-18 01:54:19 +01:00
Stefan Rueger
792b712fe5
Reformat spacing/comments in src/main.c 2024-08-18 01:54:18 +01:00
Stefan Rueger
f2de199b49
Reformat spacing/comments in src/lists.c 2024-08-18 01:54:18 +01:00
Stefan Rueger
2f360d846c
Reformat spacing/comments in src/linuxspi.h 2024-08-18 01:54:18 +01:00
Stefan Rueger
6263151551
Reformat spacing/comments in src/linuxspi.c 2024-08-18 01:54:18 +01:00
Stefan Rueger
80fd0ab341
Reformat spacing/comments in src/linuxgpio.h 2024-08-18 01:54:17 +01:00
Stefan Rueger
3dbc6fc9ad
Reformat spacing/comments in src/linuxgpio.c 2024-08-18 01:54:17 +01:00
Stefan Rueger
23d5ba2ddb
Reformat spacing/comments in src/linux_ppdev.h 2024-08-18 01:54:17 +01:00
Stefan Rueger
cccdf8e5ba
Reformat spacing/comments in src/libavrdude.h 2024-08-18 01:54:17 +01:00
Stefan Rueger
92076e4caa
Reformat spacing/comments in src/leds.c 2024-08-18 01:54:16 +01:00
Stefan Rueger
524e25affe
Reformat spacing/comments in src/jtagmkI_private.h 2024-08-18 01:54:16 +01:00
Stefan Rueger
0c820fbf65
Reformat spacing/comments in src/jtagmkII_private.h 2024-08-18 01:54:16 +01:00
Stefan Rueger
090a93748b
Reformat spacing/comments in src/jtagmkII.h 2024-08-18 01:54:16 +01:00
Stefan Rueger
8acc6039f4
Reformat spacing/comments in src/jtagmkII.c 2024-08-18 01:54:15 +01:00
Stefan Rueger
06742fde0d
Reformat spacing/comments in src/jtagmkI.h 2024-08-18 01:54:15 +01:00
Stefan Rueger
7966c1bae3
Reformat spacing/comments in src/jtagmkI.c 2024-08-18 01:54:15 +01:00
Stefan Rueger
608957637f
Reformat spacing/comments in src/jtag3_private.h 2024-08-18 01:54:14 +01:00
Stefan Rueger
dc35a5cf3b
Reformat spacing/comments in src/jtag3.h 2024-08-18 01:54:14 +01:00
Stefan Rueger
04ffea22c3
Reformat spacing/comments in src/jtag3.c 2024-08-18 01:54:14 +01:00
Stefan Rueger
1f1f885788
Reformat spacing/comments in src/ft245r.h 2024-08-18 01:54:14 +01:00
Stefan Rueger
a8836a279e
Reformat spacing/comments in src/ft245r.c 2024-08-18 01:54:13 +01:00
Stefan Rueger
f83b8ecf94
Reformat spacing/comments in src/freebsd_ppi.h 2024-08-18 01:54:13 +01:00
Stefan Rueger
12727150ea
Reformat spacing/comments in src/flip2.h 2024-08-18 01:54:13 +01:00
Stefan Rueger
a028d30e1b
Reformat spacing/comments in src/flip2.c 2024-08-18 01:54:13 +01:00
Stefan Rueger
9a3535531c
Reformat spacing/comments in src/flip1.h 2024-08-18 01:54:12 +01:00
Stefan Rueger
12c19e589f
Reformat spacing/comments in src/flip1.c 2024-08-18 01:54:12 +01:00
Stefan Rueger
6f98a6cd58
Reformat spacing/comments in src/fileio.c 2024-08-18 01:54:12 +01:00
Stefan Rueger
7b0ef6cc7a
Reformat spacing/comments in src/dryrun_private.h 2024-08-18 01:54:12 +01:00
Stefan Rueger
96aa32da4f
Reformat spacing/comments in src/dryrun.h 2024-08-18 01:54:11 +01:00
Stefan Rueger
cdef592e44
Reformat spacing/comments in src/dryrun.c 2024-08-18 01:54:11 +01:00
Stefan Rueger
16378014d8
Reformat spacing/comments in src/doc/avrdude.texi 2024-08-18 01:54:11 +01:00
Stefan Rueger
4dc273d990
Reformat spacing/comments in src/disasm.c 2024-08-18 01:54:11 +01:00
Stefan Rueger
c944770e6f
Reformat spacing/comments in src/dfu.h 2024-08-18 01:54:10 +01:00
Stefan Rueger
afdfe12dda
Reformat spacing/comments in src/dfu.c 2024-08-18 01:54:10 +01:00
Stefan Rueger
7c2894a23a
Reformat spacing/comments in src/developer_opts_private.h 2024-08-18 01:54:10 +01:00
Stefan Rueger
a1e9969780
Reformat spacing/comments in src/developer_opts.h 2024-08-18 01:54:09 +01:00
Stefan Rueger
b776c96619
Reformat spacing/comments in src/developer_opts.c 2024-08-18 01:54:09 +01:00
Stefan Rueger
ec68fc1766
Reformat spacing/comments in src/crc16.h 2024-08-18 01:54:09 +01:00
Stefan Rueger
0f1dc19d06
Reformat spacing/comments in src/crc16.c 2024-08-18 01:54:09 +01:00
Stefan Rueger
6977a3d674
Reformat spacing/comments in src/confwin.c 2024-08-18 01:54:08 +01:00
Stefan Rueger
eb8c70e8f7
Reformat spacing/comments in src/config_gram.y 2024-08-18 01:54:08 +01:00
Stefan Rueger
790d51bef9
Reformat spacing/comments in src/config.h 2024-08-18 01:54:08 +01:00
Stefan Rueger
c7e4060094
Reformat spacing/comments in src/config.c 2024-08-18 01:54:08 +01:00
Stefan Rueger
2b8af69c46
Reformat spacing/comments in src/ch341a.h 2024-08-18 01:54:07 +01:00
Stefan Rueger
a750b2475c
Reformat spacing/comments in src/ch341a.c 2024-08-18 01:54:07 +01:00
Stefan Rueger
04a045c433
Reformat spacing/comments in src/butterfly.h 2024-08-18 01:54:07 +01:00
Stefan Rueger
d31095cb02
Reformat spacing/comments in src/butterfly.c 2024-08-18 01:54:07 +01:00
Stefan Rueger
a6e9569ef0
Reformat spacing/comments in src/buspirate.h 2024-08-18 01:54:06 +01:00
Stefan Rueger
b832e56d53
Reformat spacing/comments in src/buspirate.c 2024-08-18 01:54:06 +01:00
Stefan Rueger
791697f453
Reformat spacing/comments in src/bitbang.h 2024-08-18 01:54:06 +01:00
Stefan Rueger
5331ae6bfb
Reformat spacing/comments in src/bitbang.c 2024-08-18 01:54:06 +01:00
Stefan Rueger
0d32ef7b88
Reformat spacing/comments in src/avrpart.c 2024-08-18 01:54:05 +01:00
Stefan Rueger
7c3549ad03
Reformat spacing/comments in src/avrftdi_tpi.h 2024-08-18 01:54:05 +01:00
Stefan Rueger
d430a8e1ad
Reformat spacing/comments in src/avrftdi_tpi.c 2024-08-18 01:54:05 +01:00
Stefan Rueger
4442867a98
Reformat spacing/comments in src/avrftdi_private.h 2024-08-18 01:54:05 +01:00
Stefan Rueger
76f3e9c8fe
Reformat spacing/comments in src/avrftdi.h 2024-08-18 01:54:04 +01:00
Stefan Rueger
cf3f38dd8f
Reformat spacing/comments in src/avrftdi.c 2024-08-18 01:54:04 +01:00
Stefan Rueger
5069f54438
Reformat spacing/comments in src/avrdude.h 2024-08-18 01:54:04 +01:00
Stefan Rueger
ec084bb539
Reformat spacing/comments in src/avrdude.1 2024-08-18 01:54:03 +01:00
Stefan Rueger
41ee6806db
Reformat spacing/comments in src/avrcache.c 2024-08-18 01:54:03 +01:00
Stefan Rueger
8a53ab4cef
Reformat spacing/comments in src/avr_opcodes.c 2024-08-18 01:54:03 +01:00
Stefan Rueger
742a401048
Reformat spacing/comments in src/avr910.h 2024-08-18 01:54:03 +01:00
Stefan Rueger
038843c48d
Reformat spacing/comments in src/avr910.c 2024-08-18 01:54:02 +01:00
Stefan Rueger
c393085013
Reformat spacing/comments in src/avr.c 2024-08-18 01:54:02 +01:00
Stefan Rueger
e80b03a773
Reformat spacing/comments in src/arduino.h 2024-08-18 01:54:02 +01:00
Stefan Rueger
0d83fce664
Reformat spacing/comments in src/arduino.c 2024-08-18 01:54:02 +01:00
Stefan Rueger
dc325d8828
Reformat spacing/comments in NEWS 2024-08-18 01:54:01 +01:00
Stefan Rueger
3baeab0b93
Update NEWS 2024-08-18 01:06:30 +01:00
Stefan Rueger
8c121cfadf
Merge pull request #1891 from ndim/test-avrdude-bugfixes
Some bugfixes for the tools/test-avrdude script
2024-08-18 01:04:06 +01:00
Hans Ulrich Niedermann
8f64d849a5 test-avrdude: Determine mem sizes without the full command
Determine the flash and ee memory sizes without invoking the full
${avrdude[@]} command with logging etc.

Slight adaptation of code by Stefan Rueger from
https://github.com/avrdudes/avrdude/pull/1891#issuecomment-2293314322
2024-08-16 16:27:05 +02:00
Hans Ulrich Niedermann
cef23e252e test-avrdude: Condense two info lines into one
Condense the information about the avrdude binary executable
and its version from two output lines into a single output line.

Slight adaptation of code by Stefan Rueger from
https://github.com/avrdudes/avrdude/pull/1891#issuecomment-2293314322
2024-08-16 16:17:19 +02:00
Hans Ulrich Niedermann
b8718e6b5d test-avrdude: Replace associative array with function call
Macos ships a quite old version of bash (3.x) which does not have
associative arrays (declare -A) yet.

As the test-avrdude script only uses one associative array
for a static mapping of one character strings to one word
strings, this can be easily replaced by a shell function
containing a "case" statement.

Before this fix:

2024-08-15T15:39:59.9596380Z Prepare "-cdryrun -pm2560" and press 'enter' or 'space' to continue. Press any other key to skip
2024-08-15T15:40:00.5796130Z    0.155 s: flash raw format -T/-U write/verify cola-vending-machine.raw
2024-08-15T15:40:00.7006170Z    0.111 s: flash extended address and hole test
2024-08-15T15:40:00.7057180Z ./tools/test-avrdude: line 322: declare: -A: invalid option
2024-08-15T15:40:00.7057750Z declare: usage: declare [-afFirtx] [-p] [name[=value] ...]
2024-08-15T15:40:00.9218810Z    0.212 s: flash writing R numbers
2024-08-15T15:40:01.1793950Z    0.240 s: flash reading and verifying R numbers
2024-08-15T15:40:01.3661060Z    0.173 s: flash writing R numbers
2024-08-15T15:40:01.6317540Z    0.254 s: flash reading and verifying R numbers
2024-08-15T15:40:01.8235780Z    0.182 s: flash writing R numbers
2024-08-15T15:40:02.0724260Z    0.239 s: flash reading and verifying R numbers
2024-08-15T15:40:02.2713120Z    0.188 s: flash writing R numbers
2024-08-15T15:40:02.4497490Z    0.162 s: flash reading and verifying R numbers
2024-08-15T15:40:02.5897960Z    0.128 s: flash writing R numbers
2024-08-15T15:40:02.8667350Z    0.263 s: flash reading and verifying R numbers
2024-08-15T15:40:03.0635260Z    0.181 s: flash writing srec format
2024-08-15T15:40:03.2152560Z    0.142 s: flash reading and verifying srec format file

After this fix:

2024-08-15T17:23:24.5161820Z Prepare "-cdryrun -pm2560" and press 'enter' or 'space' to continue. Press any other key to skip
2024-08-15T17:23:25.1088990Z    0.162 s: flash raw format -T/-U write/verify cola-vending-machine.raw
2024-08-15T17:23:25.2742090Z    0.157 s: flash extended address and hole test
2024-08-15T17:23:25.4795650Z    0.196 s: flash writing binary numbers
2024-08-15T17:23:25.6721130Z    0.180 s: flash reading and verifying binary numbers
2024-08-15T17:23:25.8423490Z    0.161 s: flash writing octal numbers
2024-08-15T17:23:26.0901770Z    0.235 s: flash reading and verifying octal numbers
2024-08-15T17:23:26.2308860Z    0.127 s: flash writing decimal numbers
2024-08-15T17:23:26.4667010Z    0.228 s: flash reading and verifying decimal numbers
2024-08-15T17:23:26.6574670Z    0.180 s: flash writing hexadecimal numbers
2024-08-15T17:23:26.8651240Z    0.200 s: flash reading and verifying hexadecimal numbers
2024-08-15T17:23:27.0446640Z    0.168 s: flash writing R numbers
2024-08-15T17:23:27.3074230Z    0.250 s: flash reading and verifying R numbers
2024-08-15T17:23:27.4962750Z    0.179 s: flash writing srec format
2024-08-15T17:23:27.6594570Z    0.150 s: flash reading and verifying srec format file
2024-08-16 16:13:28 +02:00
Hans Ulrich Niedermann
4323a43519 test-avrdude: Print the type of the avrdude_bin executable 2024-08-16 16:13:28 +02:00
Hans Ulrich Niedermann
f3e8524cb3 ci: linux-autotools use uninstalled avrdude for test-avrdude
Use the uninstalled avrdude executable and the avrdude.conf config file
which have just been built for the dry-run test with tools/test-avrdude.

Note that the parameter for the config file is a bit unexpected:

    -c "-C path/to/avrdude.conf"
2024-08-16 16:13:28 +02:00
Hans Ulrich Niedermann
a8a8711b34 test-avrdude: Abort if running "avrdude -v" fails 2024-08-16 16:13:28 +02:00
Hans Ulrich Niedermann
a2906da411 test-avrdude: Adapt version check to new version format
The output of the version information in "avrdude -v" has changed between
avrdude 7.3 and now (commit cf0822bb71):

avrdude: Version 7.3

Avrdude version 7.3-20240814 (250a663a)

This means that the old grep call looking for "Version" cannot
find anything any more, and therefore needs to be changed.

This was not discovered as the test-avrdude script neglected to
abort if no version information is found.
2024-08-16 16:13:28 +02:00
Stefan Rueger
e5f4429cc6
Update NEWS 2024-08-16 01:21:46 +01:00
Stefan Rueger
0350d6706b
Merge pull request #1892 from stefanrueger/docu
Improve documentation
2024-08-16 01:20:17 +01:00
Stefan Rueger
baf178981e
Update avrdude.pdf 2024-08-16 01:08:45 +01:00
Stefan Rueger
bd3426131a
Update examples in documentation 2024-08-16 01:01:06 +01:00
Stefan Rueger
d8b977e2d0
Change verbosity for showing connected USB devices 2024-08-15 23:28:26 +01:00
Stefan Rueger
3a35adffb7
Add avrdude.1 docu for pickit5_updi 2024-08-15 22:44:15 +01:00
Stefan Rueger
d45bb3937e
Update avrintel.c 2024-08-15 22:17:45 +01:00
Stefan Rueger
e230d8898e
Fix filename for stdout 2024-08-15 13:09:52 +01:00
Stefan Rueger
f52748db0b
Change libusb cannot configure warning to notice 2024-08-14 20:50:14 +01:00
Stefan Rueger
974e1d2171
Update NEWS and documentation 2024-08-14 18:42:25 +01:00
Stefan Rueger
a708c53103
Update AUTHORS 2024-08-14 18:42:04 +01:00
Stefan Rueger
c78b137782
Clean up documentation 2024-08-14 18:41:09 +01:00
Stefan Rueger
8fcd0fd71c
Record command line when debugging 2024-08-14 18:34:44 +01:00
Stefan Rueger
2b7c9de71c
Merge pull request #1887 from stefanrueger/jtag3_pdi
Fix addresses for jtag3_pdi boot and apptable
2024-08-14 18:05:43 +01:00
Stefan Rueger
90ecd9d8e9
Merge pull request #1886 from stefanrueger/readsize
Fix ATmega1284/P readsize
2024-08-14 18:02:40 +01:00
Stefan Rueger
55fbcbd368
Merge pull request #1883 from stefanrueger/erase
Silently skip erasing read-only parts of a memory
2024-08-14 18:02:01 +01:00
Stefan Rueger
24074248ba
Merge pull request #1880 from MCUdude/usbproduct
Make usbproduct available to programmers
2024-08-14 18:01:42 +01:00
MX682X
beaebd989c
PICkit 5 support (#1863) 2024-08-14 18:01:04 +01:00
Stefan Rueger
418e45492d
Merge pull request #1714 from dl8dtl/swig_libavrdude
SWIG Python wrapper for libavrdude
2024-08-14 17:58:53 +01:00
Stefan Rueger
96023bb32d
Add is_avr32() macro for completeness 2024-08-14 17:58:02 +01:00
Stefan Rueger
e4536c79e4
Replace (unsigned long) -1L with ~0UL 2024-08-14 14:02:51 +01:00
Stefan Rueger
7b0735d146
Fix addresses for jtag3_pdi boot and apptable 2024-08-14 13:55:37 +01:00
Joerg Wunsch
3ca1d7f761 Merge branch 'main' into swig_libavrdude 2024-08-13 22:37:56 +02:00
Joerg Wunsch
31a6b48dc0 Document prerequisites for the GUI 2024-08-13 22:36:50 +02:00
Joerg Wunsch
d55a7901c4 Turn init_cx() into a libavrdude member
Beyond initializing the cx pointer, it turns out more cleanup might be
required when re-initializing the context pointer.  (Normal CLI only
initializes it once, so that's not an issue there.)

Thus, join all the required actions into an init_cx() function
provided by the library.
2024-08-13 22:27:03 +02:00
Stefan Rueger
53dde4fce0
Fix ATmega1284/P readsize 2024-08-13 00:23:02 +01:00
Stefan Rueger
abb6fe6ca2
Refrain from erasing read-only parts of a memory 2024-08-12 18:37:18 +01:00
Stefan Rueger
cd956e827e
Exclude all but flash/eeprom/sig from ALL in debugwire i/fce or -c urclock 2024-08-12 15:31:21 +01:00
Joerg Wunsch
7b7b3d8837 Merge branch 'main' into swig_libavrdude 2024-08-12 13:30:36 +02:00
Joerg Wunsch
3a9857f525 Document how to start the GUI demonstrator 2024-08-12 06:40:30 +02:00
MCUdude
14d6e16bcc Make usbproduct available to programmers 2024-08-11 23:10:14 +02:00
Joerg Wunsch
8af581640e Re-initialize AVRDUDE context cx on new programmer connection
This is meant to clean up everything that has been done before.

For this to work, free up the old pointer first.
2024-08-11 21:50:54 +02:00
Joerg Wunsch
c17ccf610b Add init_cx()
This initializes the global context pointer, similar to what
avrdude's main.c is doing at startup.
2024-08-10 23:41:28 +02:00
Joerg Wunsch
a7eaf6f81f Merge remote-tracking branch 'upstream/main' into swig_libavrdude 2024-08-10 21:46:08 +02:00
Stefan Rueger
11f419f554
Update NEWS 2024-08-09 20:28:06 +01:00
Stefan Rueger
23244e7223
Merge pull request #1877 from stefanrueger/jtag3-prodsig
Fixes for jtag3 programmers and prep for jtagmkII
2024-08-09 20:26:18 +01:00
Stefan Rueger
526ffe1814
Add options -a and -m to test8 2024-08-09 20:24:53 +01:00
Stefan Rueger
5999e5f067
Merge branch 'avrdudes:main' into jtag3-prodsig 2024-08-09 18:35:06 +01:00
Stefan Rueger
c833d9fae0
Update NEWS/docu 2024-08-09 18:34:46 +01:00
Stefan Rueger
3c8ea5e638
Merge branch 'avrdudes:main' into jtag3-prodsig 2024-08-09 18:30:26 +01:00
Stefan Rueger
5537a64cb3
Merge pull request #1876 from stefanrueger/udev-again
Add more hard-coded usbvid/pid to udev rules
2024-08-09 18:29:33 +01:00
Stefan Rueger
2834faf4c1
Merge pull request #1875 from stefanrueger/deprecated
Deprecate obsolete features and options
2024-08-09 18:28:33 +01:00
Stefan Rueger
2ae5f08c9b
Exclude jtag2updi sib memory 2024-08-09 18:20:51 +01:00
Stefan Rueger
80cd5a97ce
Add scope of jtagmkII.c 2024-08-09 18:13:28 +01:00
Stefan Rueger
78f0594971
Update scope of jtag3.c 2024-08-09 18:13:15 +01:00
Stefan Rueger
f2be9b030c
Consider bootrow for jtagmkII and PDI/calibration 2024-08-09 17:11:34 +01:00
Stefan Rueger
08aaf6e361
Add programmer type to -c*/d output 2024-08-09 16:43:02 +01:00
Stefan Rueger
f1df228902
Add bash script tools/test8 for release v8.0 testing 2024-08-09 14:33:30 +01:00
Stefan Rueger
a2c5b02c5d
Fix prodsig memories for jtag3/pdi/classic 2024-08-09 03:01:49 +01:00
Stefan Rueger
c00321dd52
Exclude jtag3 classic jtag prodsig memories 2024-08-09 02:32:34 +01:00
Stefan Rueger
fc0169f676
Add more hard-coded usbvid/pid to udev rules 2024-08-08 19:29:52 +01:00
Stefan Rueger
d91128269a
Deprecate obsolete features and options 2024-08-08 13:52:31 +01:00
Stefan Rueger
28ebfa0a4b
Update README.md with link to avrdude.pdf 2024-08-08 01:25:49 +01:00
Stefan Rueger
cdce41e7d2
Update NEWS/docu 2024-08-08 01:22:26 +01:00
Stefan Rueger
beb8a275ae
Merge pull request #1873 from stefanrueger/random
Initialise dryrun flash with realistic random code
2024-08-08 01:17:29 +01:00
朝日薫 / K.Sato
19d1ab6695
Writing BOOTROW for Curiosity Nano (#1870)
* Fix writing BOOTROW for Curiosity Nano by @askn37 
* Terminal writes to bootrow will do a read/CE/write cycle if needed by @stefanrueger 

Co-authored-by: Stefan Rueger <stefan.rueger@urclocks.com>
2024-08-08 01:15:34 +01:00
Stefan Rueger
c5a2412951
Merge pull request #1869 from stefanrueger/prodsig
Refine programmer/part/memory compatibility for ALL expansion
2024-08-08 01:12:49 +01:00
Stefan Rueger
d9deca0357
Merge pull request #1867 from stefanrueger/udev
Provide dev option `-c \*/u` that shows udev rules
2024-08-08 01:12:10 +01:00
Stefan Rueger
6490c18078
Merge pull request #1865 from stefanrueger/avrdude.pdf
Provide current avrdude.pdf documentation in repo root
2024-08-08 01:11:16 +01:00
Stefan Rueger
6f20b5d767
Merge pull request #1857 from ndim/doc-stop-building-dvi-and-ps
doc: Stop building and installing .ps and .dvi
2024-08-08 01:10:56 +01:00
Stefan Rueger
3cfce5ddb6
Merge pull request #1695 from ndim/improve-autotools-build-part-2
Improve autotools build (part 2/n)
2024-08-08 01:10:33 +01:00
Stefan Rueger
b28f24b222
Merge pull request #1637 from ndim/file-locations-in-docs
Use correct file locations in the documentation
2024-08-08 01:10:09 +01:00
Stefan Rueger
9e78cfef10
Initialise dryrun flash with realistic random code
On -x random dyrun will use only (random) opcodes that
 - The AVR architecture actually has
 - Are benign, ie, not reading/writing I/O or SRAM
 - Stay within the boundaries of the application
2024-08-08 00:53:19 +01:00
Stefan Rueger
57e236a8e6
Provide further op16_...() functions 2024-08-08 00:46:37 +01:00
Stefan Rueger
acac62846d
Add dryrun -xinit=<n> and -xrandom=<n> options 2024-08-07 17:27:12 +01:00
Stefan Rueger
1f72e0cf85
Update indexing of avrdude.texi 2024-08-07 17:05:14 +01:00
Stefan Rueger
41af587da8
Update documentation for USB permissions 2024-08-07 15:52:30 +01:00
Stefan Rueger
9a750de07f
Record USB access problems 2024-08-07 14:48:53 +01:00
Stefan Rueger
0b562510f5
Reformat error debug output of function() file line 2024-08-07 00:56:18 +01:00
Stefan Rueger
9ef51ff026
Silence powerdown comms warning 2024-08-07 00:54:34 +01:00
Stefan Rueger
7d843c4b0c
Provide str_asciiname() 2024-08-07 00:23:59 +01:00
Stefan Rueger
63b0b4a931
Reformat some continuation messages 2024-08-06 23:58:24 +01:00
Hans Ulrich Niedermann
c4d903e155 Use cmake libavrdude SOVERSION/VERSION for autotools
This transfers the information from the CMakeLists.txt
libavrdude VERSION and SOVERSION into the autotools
configure script and (partly) uses the information to
build the libavrdude.la libtool library.

At this time, VERSION must always be SOVERSION.0.0 for
this to work (and that is checked).
2024-08-07 00:53:50 +02:00
Hans Ulrich Niedermann
dfe14e63ae Only build and use libavrdude as a libtool library
As libtool is supposed to be able to build libraries for every
target system, we delegate library building to libtool and stop
building our own static libavrdude.a library.

You can control whether the static/dynamic library is built by
using the --(disable|enable)-(static|dynamic) configure flags.
2024-08-07 00:52:31 +02:00
Hans Ulrich Niedermann
a74c58b32a Keep workaround for no-dist-built-files not being available
As no-dist-built-files was only introduced in Automake 1.16.4,
we cannot rely on that feature being present and need to continue
using our own workaround.

This hooks the dist-hook in a more robust fashion in the face
of multiple dist-hook targets (and versioninfo.mk already uses
one).
2024-08-07 00:37:14 +02:00
Hans Ulrich Niedermann
0b82a1f124 CI: no need to install gettext for linux autotools test 2024-08-07 00:37:14 +02:00
Hans Ulrich Niedermann
50751ee5b3 configure.ac: Guard macros with m4_pattern_forbid
Guard m4 macro calls with m4_pattern_forbid for all
macros which do not come with Autoconf/Automake.

All other macros might not be present on the system,
and it is better to m4_pattern_forbid them and have
autoreconf fail, than to have autoreconf generate a
malformed broken configure script which then always
fails with a weird error message.
2024-08-07 00:37:14 +02:00
Hans Ulrich Niedermann
ef441f58d3 Elaborate comments on versioninfo_*
Elaborate a bit more on the VERSIONINFO_* and versioninfo_*
m4 macros. This should help me get back into things when I
come back to this in a year or so and have forgotten most
of the details.
2024-08-07 00:37:14 +02:00
Stefan Rueger
c16603a96e
Make warning about unused fuse bits a debug message
Different parts read unused fuse bits back with different bit default
values, the ATDF files don't necessarily document this correctly.

Rather than showing a warning that is ignored make this a debug message.
2024-08-06 22:33:14 +01:00
Stefan Rueger
4b03d25aba
Skip memories that the interface/part combo cannot handle 2024-08-06 22:17:35 +01:00
Stefan Rueger
00edcd220e
Make avr_mem_exclude() a libavrdude function 2024-08-06 21:02:49 +01:00
Stefan Rueger
8e10196efd
Fix exceptions for ALL memory list 2024-08-06 14:04:29 +01:00
mcuee
f06b436fe7
Update build.yml to add missing libusb-compat for macOS Homebrew 2024-08-06 15:52:41 +08:00
Stefan Rueger
105f72df31
Refine ALL expansion: exclude known exceptions
For example, classic parts with usersig memory cannot access that using ISP.
2024-08-06 00:31:29 +01:00
Stefan Rueger
546cc8f286
Improve messaging around read errors 2024-08-06 00:19:36 +01:00
Stefan Rueger
3c9d4dbbfe
Define sernum/prodsig ISP read op for t12/t15 2024-08-06 00:19:06 +01:00
Stefan Rueger
98524b33b3
Document user udev rules ought to be 60 or below 2024-08-05 00:57:18 +01:00
Stefan Rueger
74e1fcf13b
Remove comment about reloading udev rules and redraft docu 2024-08-05 00:35:06 +01:00
Stefan Rueger
c090a99aa0
Document udev rule output via -c prog/u 2024-08-04 22:21:14 +01:00
Stefan Rueger
ee8bbe8463
Tweak suggested udev rules 2024-08-04 22:20:37 +01:00
Stefan Rueger
192a34f2db
Provide dev option -c*/u for udev rules 2024-08-04 20:35:09 +01:00
Stefan Rueger
7cc0e08b89
Add relevant usbvid/usbpid to programmers in avrdude.conf 2024-08-04 19:56:35 +01:00
Stefan Rueger
ccc856533f
Provide str_ccpgmids() function 2024-08-04 19:50:43 +01:00
Stefan Rueger
af80e729d9
Provide current avrdude.pdf documentation in repo root 2024-08-03 16:55:00 +01:00
Stefan Rueger
0f4715441c
Update News 2024-08-03 16:47:16 +01:00
Stefan Rueger
a4be96415e
Merge pull request #1864 from stefanrueger/serno-jtag3
Provide -P usb:vid:pid for USB hid i/f and allow long -P usb:serno
2024-08-03 16:30:25 +01:00
Stefan Rueger
420c59f26a
Merge pull request #1862 from stefanrueger/auto-erase
Refine auto-erase strategy
2024-08-03 16:29:38 +01:00
Stefan Rueger
3b9fc405dc
Merge branch 'main' into auto-erase 2024-08-03 16:25:33 +01:00
Stefan Rueger
1c9996b4c7
Merge pull request #1859 from stefanrueger/lockbits-tpi-jpag3
Fix byte writes to TPI lockbits for jpag3.c
2024-08-03 16:22:41 +01:00
Stefan Rueger
b8ceffc040
Merge pull request #1856 from ndim/accept-pdcurses-as-ncurses
cmake: LIB_NCURSES also accept pdcurses
2024-08-03 16:21:31 +01:00
Stefan Rueger
bad3742af8
Merge pull request #1855 from MCUdude/ch342
Add more WCH USB to serial chips
2024-08-03 16:20:44 +01:00
Stefan Rueger
92d4db7262
Provide -P usb:vid:pid for USB hid i/f and allow long -P usb:serno 2024-08-03 16:14:45 +01:00
Stefan Rueger
375c406d23
Merge pull request #1853 from MCUdude/x-E-docs
Add missing documentation from #1844
2024-08-03 15:14:12 +01:00
Stefan Rueger
25e0ea3cba
Merge pull request #1849 from stefanrueger/signature
Update look and feel
2024-08-03 15:12:43 +01:00
Stefan Rueger
fa587c291d
Print return code as (rc = %d) in messages 2024-08-03 02:30:29 +01:00
Stefan Rueger
f3674c3a77
Move some selected _info() msgs to _notice() 2024-08-03 02:27:02 +01:00
Stefan Rueger
a91c0dbce4
Review imgs_ continuation messages 2024-08-03 01:54:16 +01:00
Stefan Rueger
ba29f69b74
Fix upper/lower case in messages 2024-08-03 01:04:29 +01:00
Stefan Rueger
385c2e6b10
Refine auto-erase strategy 2024-08-02 19:02:33 +01:00
Stefan Rueger
8132abbf71
Fix byte writes to TPI lockbits for jpag3.c 2024-08-02 14:11:49 +01:00
Stefan Rueger
0610c87f11
Compare verbose with symbolic MSG_ names 2024-08-02 00:44:06 +01:00
Stefan Rueger
a1b4c66447
Replace some function names in strings with __func__ 2024-08-02 00:20:32 +01:00
Stefan Rueger
d7702dc87d
Move selected notice messages to other levels 2024-08-01 23:36:06 +01:00
Stefan Rueger
4374b44f60
Move selected notice2 messages to debug level 2024-08-01 22:57:10 +01:00
Hans Ulrich Niedermann
7ccd4bc7b8 doc: Stop building and installing .ps and .dvi
Building info, pdf, and HTML is enough.

ps and dvi are not needed any more.
2024-08-01 21:38:31 +02:00
MCUdude
08f5d260a3 Fix typo 2024-08-01 19:39:47 +02:00
MCUdude
850a19a490 Add more WCH SUB to serial chips
USB PIDs found here: https://github.com/WCHSoftGroup/ch343ser_linux/blob/main/driver/ch343.c
2024-08-01 19:34:13 +02:00
MCUdude
1a98ec4547 Add CH342 serial adapter 2024-08-01 19:05:39 +02:00
MCUdude
040ccc48e1 Add -E exitspec section 2024-08-01 15:34:06 +02:00
MCUdude
90caab6653 Tweak grammar 2024-08-01 15:30:38 +02:00
MCUdude
3e28f6fe10 add new -x parameters 2024-08-01 11:00:41 +02:00
MCUdude
62f808be1a Add exitspec section and add new -x parameters 2024-08-01 10:23:57 +02:00
Hans Ulrich Niedermann
cec14ad8ed cmake: LIB_NCURSES also accept pdcurses
The Fedora mingw environment comes with pdcurses, which states

> Note that ncurses is not available for MinGW / Windows.
> Applications which need curses functionality can use this
> package, provided they don't use any of the extensions
> specific to ncurses.

This at least allows the cross compile build to succeed, I
have not tested the executable under Windows or Wine.
2024-08-01 03:25:03 +02:00
Stefan Rueger
1e1ec0bdad
Silence compiler warning 2024-08-01 01:25:44 +01:00
Stefan Rueger
d13a821159
Merge branch 'avrdudes:main' into signature 2024-08-01 01:20:44 +01:00
Stefan Rueger
cf0822bb71
Update look and feel 2024-08-01 01:17:24 +01:00
Stefan Rueger
6bb8b521d3
Silence compiler warnings 2024-07-31 23:07:31 +01:00
Stefan Rueger
42adfbd4e3
Fix typo 2024-07-31 22:53:27 +01:00
Stefan Rueger
f5117fffe0
Merge branch 'avrdudes:main' into signature 2024-07-31 20:47:20 +01:00
Stefan Rueger
20891991d2
Update NEWS 2024-07-31 17:29:30 +01:00
Stefan Rueger
bf3ca02fe0
Merge pull request #1850 from ndim/remove-svn-tags
Remove obsolete SVN $Id$ tags from source files
2024-07-31 17:03:11 +01:00
Stefan Rueger
0fe0470cfe
Merge pull request #1844 from MCUdude/avr109-autorst
Extended parameters (`-x` and `-E`) improvements
2024-07-31 17:02:18 +01:00
Stefan Rueger
cbe0ef9c29
Merge pull request #1843 from MCUdude/libserialport-error
Improve error handling when Avrdude is built without libserialport
2024-07-31 16:59:16 +01:00
Stefan Rueger
7272151236
Merge pull request #1842 from stefanrueger/disasm
Provide terminal disasm command
2024-07-31 16:58:49 +01:00
Stefan Rueger
f3a35fe163
Install elf2tag in bin and document corresponding use 2024-07-31 16:51:58 +01:00
Stefan Rueger
8411fe4e31
Simplify message 2024-07-31 16:15:17 +01:00
Hans Ulrich Niedermann
bc2e3609a1 Remove obsolete SVN $Id$ tags from source files
Remove SVN $Id$ tags from source files which have been made
obsolete by moving to git and serve no purpose any more.

This mostly removes the matches printed by the command

    git grep -E '\$[A-Za-z]+\$'

The remaining exceptions are some binary files (PDF and font files),
and jquery js files with both $Id$ and $Date$ tags.
2024-07-31 17:12:55 +02:00
Stefan Rueger
823118c0ba
Make main avrdude run less verbose 2024-07-31 16:08:17 +01:00
Stefan Rueger
137ece466b
Move tools/elf2tag -> src/elf2tag 2024-07-30 13:17:46 +01:00
Stefan Rueger
3d46a0cd77
Check in elf2tag whether needed commands are installed 2024-07-30 02:40:45 +01:00
Stefan Rueger
d97d05790b
Document terminal disasm command 2024-07-30 02:38:06 +01:00
MCUdude
92a272932e help flag should be false by default, again 2024-07-29 21:35:31 +02:00
MCUdude
a874b521e4 help flag should be false by default 2024-07-29 21:27:59 +02:00
MCUdude
77db93b5d0 Fix formatting and missing brackets 2024-07-29 21:17:33 +02:00
MCUdude
38da070921 Fix bug in the serprog ext parameters parsing 2024-07-29 20:42:58 +02:00
MCUdude
297d256c07 Fix incorrect noautoreset implementation for the Wiring programmer option 2024-07-29 20:20:27 +02:00
MCUdude
3c679b10c6 Add help text for -E exitspec 2024-07-29 19:44:37 +02:00
MCUdude
95b4e7804a Improve -x help for the remaining programmers 2024-07-29 18:04:34 +02:00
MCUdude
9658908e7f check if pgm->type is Arduino instead of pgmid 2024-07-29 17:45:16 +02:00
MCUdude
41e7d81544 Fix issue where help flag wasn't set when it should 2024-07-29 17:43:07 +02:00
Stefan Rueger
df5d1feb89
Add remaining spaces after -x in messages 2024-07-29 16:24:40 +01:00
Stefan Rueger
f37e5930df
Clarify invalid value messages for valid -x parameters ...
... and generally massage messaging around -x parameters
2024-07-29 16:15:11 +01:00
MCUdude
313c8b4d1a Print helptext for all programmers that supports extended params when incorrect param is specified 2024-07-29 10:31:56 +02:00
MCUdude
568bb8e575 Use bool instead of int for help flag 2024-07-29 09:19:50 +02:00
MCUdude
c1a0378229 Print -x help text when invalid extended option is passed 2024-07-29 06:31:50 +02:00
MCUdude
cda52a3a06 Fix autoreset flag for -c arduino
plus a few other minor things
2024-07-28 21:56:49 +02:00
MCUdude
12c41f2d0e Small tweaks based on feedback from @stefanrueger 2024-07-28 20:24:31 +02:00
MCUdude
94e968af91 Use %i instead of %2d 2024-07-28 20:07:57 +02:00
Stefan Rueger
c3d97e923e
Add -xnoautoreset for the -c urclock programmer 2024-07-28 17:57:51 +01:00
Stefan Rueger
c51d50ce09
Add sram.start and sram.end to known symbols 2024-07-28 00:24:39 +01:00
Stefan Rueger
9d2af7323c
Extend ldi symbolic names to ser 2024-07-28 00:09:47 +01:00
Stefan Rueger
a107d02a1b
Format references to labels in space-saving way 2024-07-27 23:34:26 +01:00
Stefan Rueger
7c92a355f9
Strengthen tagfile parsing 2024-07-27 16:50:04 +01:00
Stefan Rueger
95bc4db4b9
Generate symbolic names for ldi on register pairs 2024-07-27 13:32:58 +01:00
Stefan Rueger
e594863f95
Provide op_width() and z_width() 2024-07-27 11:05:06 +01:00
Stefan Rueger
8f7afd6b56
Make opcode mnemonic variants more memorable 2024-07-27 00:17:00 +01:00
Stefan Rueger
5f3d2b4452
Provide ldi_Rd() and ldi_K() extractors 2024-07-26 17:17:17 +01:00
Stefan Rueger
16c3eedc53
Consistently use mnemo and opcode terminology
- ldi is the mnemonic
 - Opcode is the (mostly 16-bit) machine instruction
2024-07-26 16:53:49 +01:00
Stefan Rueger
8001aedfae
Write is_opcode32() and ldi_register() in terms of mnemonics 2024-07-26 16:45:07 +01:00
Stefan Rueger
63e27021e2
Give disasm option variables punchier names 2024-07-26 16:21:33 +01:00
Stefan Rueger
68555d1688
Refrain from labelling zero-distance rjmps/branches 2024-07-26 16:15:37 +01:00
Stefan Rueger
c0aa3b68de
Rename gcc isr vector numbers with isr names 2024-07-26 14:49:42 +01:00
Stefan Rueger
d6c970543d
Only provide main label if not in tagfile 2024-07-26 13:53:34 +01:00
Stefan Rueger
8570dd27fd
Use memory labels for lds/sts 2024-07-26 01:23:55 +01:00
Stefan Rueger
d221e46673
Shorten I/O Register name 2024-07-25 18:36:54 +01:00
Stefan Rueger
32ca573b71
Make list of jumpable addresses a bitfield 2024-07-25 17:40:19 +01:00
Stefan Rueger
fec6e842df
Disassemble a series of 4 or more 0xff as fill block 2024-07-24 19:54:02 +01:00
Stefan Rueger
ac0f0af7bb
Provide disasm -g option that generates avr-gcc source 2024-07-24 18:42:45 +01:00
Stefan Rueger
a14b13e2bd
Consider UTF-8 characters when escaping strings 2024-07-23 23:59:05 +01:00
Stefan Rueger
7162711ebc
Refine opcode_mnemo() to consider reduced-core parts 2024-07-23 16:01:28 +01:00
Stefan Rueger
4526d330ea
Provide disasm -e to show technical explanation in comment 2024-07-22 23:39:33 +01:00
Stefan Rueger
0c3044217b
Provide disasm -n to show full opcode name in comment 2024-07-22 23:31:39 +01:00
Stefan Rueger
dadd9c52cd
Auto-adjust cycles for parts with 3-byte PC 2024-07-22 22:21:01 +01:00
Stefan Rueger
cdcb8fa8a2
Provide disasm -f to show affected flags in SREG 2024-07-22 22:05:41 +01:00
Stefan Rueger
92a6e71ae4
Adjust address when disassembling flash sub-memories, eg, boot 2024-07-22 21:28:27 +01:00
Stefan Rueger
1fcc0d9f91
Consolidate disassm source into one file 2024-07-22 21:27:30 +01:00
MCUdude
0d7524deeb Add -xno_autoreset for the -c wiring programmer 2024-07-22 21:14:10 +02:00
Stefan Rueger
20cb01d4c8
Consolidate CodeLabel, PGMLabel, MemLabel and IO_Register into one symbols struct 2024-07-22 19:40:36 +01:00
MCUdude
5e4a9a7616 Add -xno_autoreset for the -c arduino programmer 2024-07-22 19:27:22 +02:00
Stefan Rueger
4d9ee7aa0f
Rename Type/Comment/Name components for clarity 2024-07-22 17:08:41 +01:00
Stefan Rueger
1721a77259
Rename Type variables/component for self-documentation 2024-07-22 16:33:00 +01:00
MCUdude
aebf970d0c Add -xautoreset option for the AVR109 programmer 2024-07-22 17:31:07 +02:00
Stefan Rueger
1eeaae5740
Warn if destination of jmp/call is outside flash 2024-07-22 14:45:12 +01:00
Stefan Rueger
08ab9cba0e
assign OTY_JMPI to icall (no sram or I/O access) 2024-07-22 14:44:08 +01:00
Stefan Rueger
41c18a2d18
Warn when opcodes have undefined results, eg, ld r26, X+ 2024-07-22 12:50:46 +01:00
Stefan Rueger
d58ad3365c
Move from callbacks to table-driven disassembly 2024-07-22 02:20:54 +01:00
MCUdude
26628ef30d improve libserialport error handling 2024-07-21 16:52:10 +02:00
Stefan Rueger
02fca3d6e7
Remove operand for spm/lpm/(e)ijmp/(e)icall 2024-07-21 10:01:41 +01:00
Stefan Rueger
ea48a29708
Change operands entries from "-" to "" in avr_opcodes table 2024-07-20 22:40:48 +01:00
MCUdude
dcb9c7e70e Improve error handling when Avrdude is built without libserialport 2024-07-20 22:18:34 +02:00
Stefan Rueger
c3732b098e
Add utility functions to avr_opcode.c 2024-07-20 17:21:50 +01:00
Stefan Rueger
d8fea60471
Reorder avr_opcodes table so that first match is reasonable
- Unallocated opcodes come last
 - Specific reduced-core sts/lds opcodes are penultimate
 - More specific opcodes come before less specific ones (clr before eor)
 - Opcodes labelled alias come behind those not labelled so
2024-07-20 15:57:03 +01:00
Stefan Rueger
52608e9dcc
Introduce idname for avr_opcodes table 2024-07-20 15:18:42 +01:00
Stefan Rueger
294f74ce43
Reformat affected SREG flags in avr_opcodes.c 2024-07-20 13:39:48 +01:00
Stefan Rueger
9f439b714a
Introduce opcode type in avr_opcodes.c 2024-07-20 13:11:36 +01:00
Stefan Rueger
68c700c4f5
Correct ijmp/eijmp operand in avr_opcodes.c 2024-07-19 20:37:23 +01:00
Stefan Rueger
8941e0d636
Give weird address the letter a for reduced-core lds/sts 2024-07-19 17:40:09 +01:00
Stefan Rueger
f23a430b2e
Improve Rd/Rr modelling in avr_opcodes.c 2024-07-19 17:02:01 +01:00
Stefan Rueger
ce391927ad
Encode register constraints for tst, clr, lsl and rol 2024-07-19 14:38:20 +01:00
Stefan Rueger
64aeb1203a
Provide a bash script to generate disasm tag files 2024-07-19 00:01:47 +01:00
Stefan Rueger
966f20b858
Adapt AVRDUDE style for GPL 2.0 licence header 2024-07-18 23:48:55 +01:00
Stefan Rueger
ab08e1c1b4
Wrap round flash on disasm 2024-07-18 23:39:40 +01:00
Stefan Rueger
7dbab82a2b
Provide disasm -d for decoding of all opcodes
- Irrespective of the part
  - Including all unallocated opcodes

Unallocated opcodes disassemble as u/opcode, eg, for the famous 0xffff:

7ff2:   ff ff           u/sbrs  r31, 7          ; 0x80 = 128
2024-07-18 23:15:16 +01:00
Stefan Rueger
88ef47c7d1
Label unallocated opcodes with OP_AVR_ILL 2024-07-18 21:10:40 +01:00
Stefan Rueger
22eb262c53
Determine default disasm options 2024-07-18 20:25:19 +01:00
Stefan Rueger
e636a0b4ce
Fix normal lds operand order 2024-07-18 20:12:52 +01:00
Stefan Rueger
a973a92023
Add sts command for reduced-core ATtiny 2024-07-18 20:11:10 +01:00
Stefan Rueger
a1050419f9
Add lds command for reduced-core ATtiny 2024-07-18 20:02:32 +01:00
Stefan Rueger
fe5a40b93c
Add spm Z+ opcode 2024-07-18 19:36:51 +01:00
Stefan Rueger
741b2ef1ef
Add lat opcode 2024-07-18 19:23:13 +01:00
Stefan Rueger
8d7cf774df
Add las opcode 2024-07-18 19:22:03 +01:00
Stefan Rueger
dc2f4df103
Add lac opcode 2024-07-18 19:20:20 +01:00
Stefan Rueger
1454b55a01
Add xch opcode 2024-07-18 19:15:33 +01:00
Stefan Rueger
c8ffcfcbec
Add des opcode 2024-07-18 19:04:29 +01:00
Stefan Rueger
e73e5de097
Loosen condition for recognising existing label 2024-07-18 19:03:57 +01:00
Stefan Rueger
3784b333cd
Fix jumpcall list for repeated use 2024-07-18 17:15:05 +01:00
Stefan Rueger
a16f4a4f89
Zap labels before reading tag file 2024-07-18 16:31:11 +01:00
Stefan Rueger
216b5e6ea9
Consolidate initialisation and header files 2024-07-18 15:16:13 +01:00
Stefan Rueger
be8b49b112
Make sbr implicit through ori 2024-07-18 14:41:06 +01:00
Stefan Rueger
b100868fd6
Reduce code footprint of disasm.c 2024-07-18 14:13:47 +01:00
Stefan Rueger
058265a25a
Update spacing in avr_opcodes table and describe unallocated opcodes 2024-07-18 14:11:46 +01:00
Stefan Rueger
06a40f5017
Adjust address to disassembly start 2024-07-18 02:13:28 +01:00
Stefan Rueger
ebd740d6da
Suppress compiler warning 2024-07-18 01:35:48 +01:00
Stefan Rueger
72c70cb98b
Move remaining static variables into context structure 2024-07-18 01:28:06 +01:00
Stefan Rueger
781c87d034
Move static buffer to closed circuit space 2024-07-18 01:00:04 +01:00
Stefan Rueger
67d627ee4c
Make Operation_xyz() functions static 2024-07-18 00:45:47 +01:00
Stefan Rueger
cf9229ad26
Simplify Tagfile_Resolve_Mem_Address() and avoid static memory 2024-07-18 00:25:24 +01:00
Stefan Rueger
e81ab78a3c
Move remaining memory allocation to mmt_xyz() functions 2024-07-17 23:57:08 +01:00
Stefan Rueger
e7a6a29997
Init MemLabels from avrintel register file 2024-07-17 23:38:58 +01:00
Stefan Rueger
f9ef0ec9d5
Init IORegisters from avrintel register file 2024-07-17 22:47:19 +01:00
Stefan Rueger
3a7c295aa9
Only disassemble opcodes that the part has 2024-07-17 21:35:29 +01:00
Stefan Rueger
a7cf86da1b
Show opcode cycles depending on part 2024-07-17 20:58:50 +01:00
Stefan Rueger
6290e92303
Remove pseudocode disassembly 2024-07-17 19:09:07 +01:00
Stefan Rueger
fe26375884
Compute opcodes for disasm, given the part 2024-07-17 18:49:58 +01:00
Stefan Rueger
be125ee0ce
Provide avr-gcc's archnum in avrdude.conf 2024-07-17 15:37:42 +01:00
Stefan Rueger
f78b407358
Model availability of opcodes for parts 2024-07-17 15:18:49 +01:00
Stefan Rueger
3bc3c0f4d9
Utilize flash size for disasm 2024-07-17 01:39:18 +01:00
Stefan Rueger
483cc07d9d
Rename _ld[1-3]/_st[1-3] to _ldx[1-3]/_stx[1-3] 2024-07-17 01:35:49 +01:00
Stefan Rueger
8e864afcf0
Lowercase opcode mnemonics 2024-07-16 22:27:07 +01:00
Stefan Rueger
baab44f9f5
Provide avr_opcodes[] table 2024-07-16 22:21:26 +01:00
Stefan Rueger
6d62c8312a
Enum opcodes instead of #define 2024-07-16 20:44:37 +01:00
Stefan Rueger
ae414be93d
Move global disasm variables into context structure 2024-07-16 19:49:57 +01:00
Stefan Rueger
a7cf143934
Assert const-ness of pointer arguments 2024-07-16 15:10:03 +01:00
Stefan Rueger
825c93e64f
Provide disasm terminal command 2024-07-16 14:44:47 +01:00
Stefan Rueger
ec285290fe
Remove option parsing from disasm files 2024-07-16 14:43:34 +01:00
Stefan Rueger
d3dbf3505a
Remove tools.[ch] and functions.h & rewrite BitCount() 2024-07-16 11:17:14 +01:00
Stefan Rueger
b2ead9a4ef
Make disasm files part of compilation 2024-07-16 11:10:55 +01:00
Stefan Rueger
a21f84bb64
Rename and reformat disasm files 2024-07-16 11:09:58 +01:00
Stefan Rueger
8f575224b1
Add avrdisas-0.07 sources 2024-07-16 10:31:41 +01:00
Stefan Rueger
5dc2399694
Update NEWS 2024-07-15 17:41:26 +01:00
Stefan Rueger
96090dd688
Merge pull request #1840 from stefanrueger/signature-check
Improve signature check for UPDI parts
2024-07-15 17:34:53 +01:00
Stefan Rueger
6039247ce2
Merge pull request #1835 from dbuchwald/issue_1832
Alternative fix proposal for #1832
2024-07-15 17:34:02 +01:00
Stefan Rueger
2c57c2e6b8
Merge pull request #1829 from stefanrueger/additional-memories
Add  fuses, calibration, sernum and tempsense memories to XMEGAs
2024-07-15 17:32:59 +01:00
Stefan Rueger
ca4534af84
Remove unnecessary empty lines in avrdude.conf 2024-07-15 17:31:55 +01:00
Stefan Rueger
f3caabf264
Make dryrun vector tables more realistic 2024-07-15 15:57:53 +01:00
Stefan Rueger
e4c67c2c6e
Skip stump parts and all 0xff/0x00 signatures in locate_part_by_signature() 2024-07-15 15:56:36 +01:00
Stefan Rueger
dbb1ceff1a
Fix jtag3 access to UPDI sigrow sub-memories 2024-07-14 23:12:20 +01:00
Stefan Rueger
0c710432d2
Update term command usage 2024-07-14 23:09:03 +01:00
Stefan Rueger
d8836d3819
Fix jtag3 access to prodsig sub-memories 2024-07-14 19:40:27 +01:00
Stefan Rueger
99bd83c186
Suppress overzealous compiler warnings 2024-07-14 19:27:04 +01:00
Stefan Rueger
43c915aca3
Skip parts with all 0xff/0x00 signature 2024-07-14 19:13:45 +01:00
Stefan Rueger
811d01e9db
Check several signature offsets when trying a -p UPDI part 2024-07-14 18:35:37 +01:00
Stefan Rueger
31bed52080
Consider prog_modes in str_ccmcunames_signature() 2024-07-14 17:59:40 +01:00
Stefan Rueger
44104df3e2
Add missing space 2024-07-14 15:46:24 +01:00
Stefan Rueger
96e92ba470
Extend prodsig and sernum to virtually all classic parts 2024-07-14 01:24:13 +01:00
Stefan Rueger
7fbd963ea4
Rearrange classic parts and parenting in avrdude.conf
Although, on the surface of it, every entry of a classic part has been
changed, and some radically so by different parenting, there are only
subtle changes in AVRDUDE's internal representation:
 - 15 parts that did not have an io memory entry now have one
 - Some ISP opcodes were replaced with equivalent ones (x maps to 0)

This has been checked using the development options, particularly -p*/At,
before and after the changes.

The benefit of the new avrdude.conf is that every (non-TPI) classic part
is now derived from a common .classic or .classic-nocal stub. This enables
putting a common prodsig and sernum memory there. Generally, parenting
off now only happens between related chips. All in all, more systematic.
And it's some 10% smaller, too.
2024-07-14 00:55:50 +01:00
Stefan Rueger
90a4a54fd3
Map x-bits to 0 for SPI opcode comparison 2024-07-14 00:41:14 +01:00
Stefan Rueger
8f7160799a
Correct comments 2024-07-13 20:17:01 +01:00
Stefan Rueger
71029c515a
Fix write delays for some classic parts
Compared the T WD_FUSE etc values in the data sheets for m169, m169a,
m169p, m169pa, m3290a, m3290p, m3290pa, m329a, m329p, m329pa, m6490a,
m6490p, m649a, m649p and m8535.
2024-07-13 14:31:48 +01:00
Stefan Rueger
6ca23bd3c7
Utilise PM_Classic in code 2024-07-12 19:52:13 +01:00
Stefan Rueger
6f92e188fd
Enable sigrow sub-memory reading for butterfly 2024-07-12 19:06:23 +01:00
Stefan Rueger
b23370a8c1
Enable sigrow sub-memory reading for avrftdi_jtag 2024-07-12 19:05:42 +01:00
Stefan Rueger
1ce9154664
Review sigrow sub-memory treatment in jtag*.c 2024-07-12 19:04:19 +01:00
Stefan Rueger
45d1bea575
Enable classic sernum read for ISP/HVPP/HVSP/JTAG in stk500v2.c 2024-07-12 18:53:16 +01:00
Stefan Rueger
8a4c00fc21
Add ability to read classic sernum mem to avr_read_byte_default() 2024-07-12 18:41:37 +01:00
Stefan Rueger
be63435aa2
Copy sernum into prodsig for classic parts in dryrun.c 2024-07-12 18:37:28 +01:00
Stefan Rueger
8d1ea38297
Fix plural in message 2024-07-12 18:25:21 +01:00
Stefan Rueger
6979fce1ee
Fix sernum entries for classic parts 2024-07-12 17:52:54 +01:00
Stefan Rueger
f489dac5f7
Fix typo 2024-07-10 19:38:10 +01:00
Dawid Buchwald
e7f7691367 Rolled back page erase feature as not needed anymore 2024-07-07 17:21:12 +02:00
Dawid Buchwald
69a55458da Merge branch 'main' into issue_1832 2024-07-07 17:15:05 +02:00
Stefan Rueger
09d4dbb5b9
Merge branch 'avrdudes:main' into additional-memories 2024-07-07 14:46:03 +01:00
Stefan Rueger
d10986f12c
Update News 2024-07-07 14:43:47 +01:00
Stefan Rueger
883a6147f7
Merge pull request #1837 from stefanrueger/updi-page-erase
Use page erase for UPDI programming
2024-07-07 14:40:20 +01:00
Stefan Rueger
c82a80435e
Merge pull request #1836 from stefanrueger/erase-note
Improve chip erase emulation for dryboot/dryrun
2024-07-07 14:40:00 +01:00
Stefan Rueger
fa618a8440
Improve documentation for terminal erase 2024-07-07 12:15:19 +01:00
Stefan Rueger
0f74b7be85
Remove note on what CE might erase 2024-07-07 00:08:57 +01:00
Stefan Rueger
d3ce83ce0e
Provide dryrun_page_erase() for PDI/UPDI parts 2024-07-07 00:07:52 +01:00
Stefan Rueger
4e2413bacb
Use page erase for UPDI programming 2024-07-06 16:01:46 +01:00
Stefan Rueger
9d21e05059
Not show EEPROM erase note when a bootloader 2024-07-06 02:07:44 +01:00
Stefan Rueger
1e05d70cda
Improve chip erase emulation for dryboot/dryrun 2024-07-06 02:02:28 +01:00
Stefan Rueger
91cd1f9673
Handle chip erase correctly for bootrow 2024-07-06 01:47:25 +01:00
Stefan Rueger
72064357ae
Inform user whether terminal erase includes EEPROM 2024-07-05 18:26:32 +01:00
Dawid Buchwald
640bf85b12 Alternative fix proposal for #1832 2024-07-05 10:23:11 +02:00
Stefan Rueger
42c984c9e8
Update NEWS 2024-07-05 02:49:20 +01:00
Stefan Rueger
816d1fd5cf
Merge pull request #1830 from stefanrueger/show-avrintel
Add developer options /vcr to explore software compatibility of parts
2024-07-04 21:20:52 +01:00
Stefan Rueger
6de1cd928e
Place classic prodsig submemories into flat address model 2024-07-04 20:34:57 +01:00
Stefan Rueger
ff35f53653
Prevent warnings for incomplete stump XMEGA family entries 2024-07-04 20:25:23 +01:00
Stefan Rueger
dbb2fc36e4
Adapt dryrun.c to new XMEGA memories 2024-07-04 20:23:01 +01:00
Stefan Rueger
5f5f081b98
Merge branch 'main' into additional-memories 2024-07-04 18:09:01 +01:00
Stefan Rueger
808457e53e
Fix flash size of x128a4 2024-07-04 18:07:34 +01:00
Stefan Rueger
56e6535f96
Document the new fuses memory for XMEGAs 2024-07-04 18:07:34 +01:00
Stefan Rueger
d184b10e54
Fix access to sigrow submemories in jtag3.c 2024-07-04 18:07:33 +01:00
Stefan Rueger
110c7f9614
Add collective fuses memory for XMEGAs 2024-07-04 18:07:33 +01:00
Stefan Rueger
cde5d3e461
Add sernum memory to m324pb, m328pb, t102 and t104 2024-07-04 18:07:33 +01:00
Stefan Rueger
ebe370ab0e
Document XMEGA calibration, sernum and tempsense memories 2024-07-04 18:07:32 +01:00
Stefan Rueger
3ea386898e
Merge pull request #1828 from stefanrueger/multi-memory-input
Multi-memory file handling
2024-07-04 17:17:47 +01:00
Stefan Rueger
7427a8e371
Remove -U/-T/-t heading when only one requested 2024-07-04 15:43:23 +01:00
Stefan Rueger
4f25cf8be6
Remove processing -U ... heading for backup/restore/verify 2024-07-04 15:33:36 +01:00
Stefan Rueger
2e1b66fb34
Add more documentation for memory lists 2024-07-04 11:24:13 +01:00
Stefan Rueger
2ad860a53a
Remove unused code 2024-07-04 00:03:07 +01:00
Stefan Rueger
23e835b8a3
Document multi-memory files and dryrun options 2024-07-02 23:05:17 +01:00
Stefan Rueger
5cf2908a08
Warn when generating multi-memory list with unsuitable format
AVRDUDE will happily generate all sorts of file formats from multiple
memories, but only understands hex, srec and elf files.
2024-07-02 20:17:34 +01:00
Stefan Rueger
3aaa722f72
Inspect memory lists to decide whether initial chip erase is needed 2024-07-02 19:48:48 +01:00
Stefan Rueger
7647aaa4fc
Show filename not pathname in -U warnings/errors 2024-07-01 00:55:33 +01:00
Stefan Rueger
dab725a343
Provide str_infilename() and str_outfilename() 2024-07-01 00:52:30 +01:00
Stefan Rueger
f1ff03d562
Change /mem to \mem for subtracting mem from list
/mem has the meaning of ALL\mem in set theory, which could cause confusion.
2024-07-01 00:30:46 +01:00
Stefan Rueger
b65c3c49b7
Fix reccount when writing srec files 2024-07-01 00:26:35 +01:00
Stefan Rueger
8a194719ba
Remove unused variables 2024-07-01 00:26:01 +01:00
Stefan Rueger
c584f84a8e
Move signature check into multi-memory file read 2024-07-01 00:18:55 +01:00
Stefan Rueger
cfaee38275
Provide avr_sig_compatible() 2024-06-30 23:53:52 +01:00
Stefan Rueger
3722abccd4
Provide str_ccmcunames_signature() 2024-06-30 22:39:53 +01:00
Stefan Rueger
5ac7c96958
Explicitly test for part being UPDI rather than assuming default 2024-06-30 22:37:37 +01:00
Stefan Rueger
30749c9673
Use PM_Classic instead of !(PM_PDI | PM_UPDI) 2024-06-29 09:00:45 +01:00
Stefan Rueger
7d70d5406f
Change memory list syntax to mem0,mem1,-mem2,/mem3,...
... where -mem or /mem removes a memory from the list so far
2024-06-29 00:33:44 +01:00
Stefan Rueger
e3da82b1ec
Mark output of /vcr dev options for automated processing 2024-06-28 16:35:54 +01:00
Stefan Rueger
95dac08ccd
Add developer option /r for listing registers 2024-06-28 16:34:24 +01:00
Stefan Rueger
9a79a6866f
Check dev_info() format at gnuc compile time 2024-06-28 13:54:30 +01:00
Stefan Rueger
e829a46a49
Add developer option /c for listing configuration options 2024-06-28 13:47:41 +01:00
Stefan Rueger
bcf88e13d7
Add developer option /v for listing interrupt vector names 2024-06-28 13:44:23 +01:00
Stefan Rueger
3990fdf84b
Add only classic parts developer options /C 2024-06-28 11:54:15 +01:00
Stefan Rueger
13683c1546
Move developer options /c /r to /e /R 2024-06-28 11:52:49 +01:00
stefanrueger
b2ed09f73d
Provide terminal verify <memlist> <file>[:format] 2024-06-27 18:21:04 +00:00
stefanrueger
5e846098c8
Provide terminal restore <memlist> <file>[:format] 2024-06-27 18:19:32 +00:00
stefanrueger
dd2a40f81d
Provide terminal backup <memlist> <file>[:format] 2024-06-27 17:21:30 +00:00
stefanrueger
a02995749c
Utilise fileio_format_with_errmsg() in parse_op() 2024-06-27 17:20:23 +00:00
stefanrueger
485ad6de91
Provide fileio_format_with_errmsg() 2024-06-27 17:15:01 +00:00
stefanrueger
bc0c1a0499
Fix Windows complaint about missing random()/srandom() 2024-06-26 16:49:10 +00:00
stefanrueger
42081e5606
Initialise memories on -c dryrun -xinit or -xrandom
$ avrdude -c dryrun -xhelp
avrdude -c dryrun extended options:
  -xinit     Initialise memories with human-readable patterns (1, 2, 3)
  -xrandom   Initialise memories with random code/values (1, 3)
  -xseed=<n> Seed random number generator with <n>, default time(NULL)
  -xhelp     Show this help menu and exit
Notes:
  (1) -xinit and -xrandom randomly configure flash wrt boot/data/code length
  (2) Patterns can best be seen with fixed-width font on -U flash:r:-:I
  (3) Choose, eg, -xseed=1 for reproducible flash configuration and output

For example:

$ avrdude -c dryrun -p 16eb28 -xinit -xseed=7 -UALL:r:backup-dry.hex:I

backup-dry.hex will be a human-readable multi-memory .hex file for testing
that has memories initialised with non-trivial contents. Great care has
been taken that the generated flash code is valid and benign, ie, it won't
touch I/O peripherals, SRAM or flash.

Can be restored with

$ avrdude -cdryrun -p 16eb28 -U ALL:w:backup-dry.hex
2024-06-26 16:22:48 +00:00
Stefan Rueger
76353b8218
Provide str_is_in_list() 2024-06-25 14:33:00 +01:00
Stefan Rueger
9a834c37c7
Update avrintel.c 2024-06-25 12:06:49 +01:00
Stefan Rueger
41eacd0eed
Fix flash page size for x128a4 2024-06-25 12:04:25 +01:00
Stefan Rueger
ad312b985a
Fix boot_section_size for x128a4 2024-06-25 01:04:05 +01:00
Stefan Rueger
f06b3dd5b9
Fix boot_section_size for AVR-Ex parts 2024-06-25 00:08:54 +01:00
Stefan Rueger
d4d6835bdf
Fix dryrun's paged write to XMEGA overlapping flash memories 2024-06-24 17:28:22 +01:00
Stefan Rueger
f3fbb2eb1d
Default -U multi-memory backups to Intel Hex with comments 2024-06-24 00:24:29 +01:00
Stefan Rueger
1a2ac74a7b
Label segments with memory names in .hex:I output files 2024-06-23 20:50:31 +01:00
Stefan Rueger
9bf11fd67a
Make sigs argument of str_mcunames_signature() const 2024-06-23 20:38:20 +01:00
Stefan Rueger
eb412304ee
Provide avr_locate_uP() 2024-06-22 12:31:59 +01:00
Stefan Rueger
23324622d9
Formalise multi-memory address layout 2024-06-22 00:33:26 +01:00
Stefan Rueger
06b64bf9fb
Provide ALL memory (all + sub-memories excluded from all) 2024-06-21 21:40:02 +01:00
Stefan Rueger
2373b0a06c
Fix access for XMEGA sernum and tempsense 2024-06-20 00:06:25 +01:00
Stefan Rueger
5d322eb9dc
Add calibration, sernum and tempsense sub-memories to XMEGAs 2024-06-19 22:09:25 +01:00
Stefan Rueger
9576aec26a
Fix boot_section_size of ATxmega128A4 2024-06-19 21:57:35 +01:00
Stefan Rueger
59cda4a216
Parent XMEGA parts from common family sub-group
This commit makes the parent of XMEGA parts one of three common ones:
 - .xmega-ab for XMEGA-A or XMEGA-B parts
 - .xmega-cd for XMEGA-C or XMEGA-D parts
 - .xmega-e for  XMEGA-E parts

The commit does not change any feature of parts or memories.
In order to prove this carry out before this commit

$ avrdude -p */At >/tmp/1

After this commit, the following command should not have any output:

$ avrdude -p */At | sort | comm -3 - /tmp/1 | grep -v family.common.values

(The only feature changes in the .xmega-* prototypes.)
2024-06-19 21:52:01 +01:00
Stefan Rueger
9a446ec0bb
Check signature of part against multi-memory file signature
... to avoid tears when mistakenly restoring a backup from another part

$ avrdude -c dryrun -p t167 -U all:r:backup.hex:I

avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e9487 (probably t167)

avrdude: processing -U all:r:backup.hex:r
         reading multiple memories ...
         eeprom      | ################################################## | 100% 0.00s
         flash       | ################################################## | 100% 0.00s
         lfuse       | ################################################## | 100% 0.00s
         hfuse       | ################################################## | 100% 0.00s
         efuse       | ################################################## | 100% 0.00s
         lock        | ################################################## | 100% 0.00s
         signature   | ################################################## | 100% 0.00s
         calibration | ################################################## | 100% 0.00s
         writing 16904 bytes to output file backup.hex

avrdude done.  Thank you.

$ avrdude -c urclock -p m328p -b 115200 -P /dev/ttyUSB0 -U all✌️backup.hex:I

avrdude -c urclock -p m328p -b 115200 -P /dev/ttyUSB0 -U all✌️backup.hex
avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e950f (probably m328p)

avrdude: processing -U all✌️backup.hex:i
avrdude: verifying 16904 bytes of multiple memories against input file backup.hex
avrdude error: signature of ATmega328P does not match file (ATtiny167, ATA5505, ATA6617C, ATA664251)
        use -F to override this check

avrdude done.  Thank you.

$ avrdude -c dryrun -p m328p -U all:w:backup.hex:I -F

avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e950f (probably m328p)

avrdude: processing -U all:w:backup.hex:I
avrdude: reading 16904 bytes for multiple memories from input file backup.hex
avrdude: 512 bytes eeprom in 1 section [0, 0x1ff]: 128 pages and 0 pad bytes
         writing 512 bytes to eeprom ...
         writing | ################################################## | 100% 0.00s
         reading | ################################################## | 100% 0.00s
         512 bytes of eeprom verified
avrdude: 16384 bytes flash in 1 section [0, 0x3fff]: 128 pages and 0 pad bytes
         writing 16384 bytes to flash ...
         writing | ################################################## | 100% 0.00s
         reading | ################################################## | 100% 0.00s
         16384 bytes of flash verified
avrdude: 1 byte lfuse in 1 section [0, 0]
         writing 1 byte to lfuse (0x62), 1 byte written, 1 verified
avrdude: 1 byte hfuse in 1 section [0, 0]
         writing 1 byte to hfuse (0xdf), 1 byte written, 1 verified
avrdude: 1 byte efuse in 1 section [0, 0]
         writing 1 byte to efuse (0xff), 1 byte written, 1 verified
avrdude: 1 byte lock in 1 section [0, 0]
         writing 1 byte to lock (0xff), 1 byte written, 1 verified

avrdude done.  Thank you.
2024-06-19 00:33:44 +01:00
Stefan Rueger
392ccf8814
Specify memory name in verfication error 2024-06-19 00:28:22 +01:00
Stefan Rueger
b366078e6a
Provide str_mcunames_signature() 2024-06-19 00:27:26 +01:00
Stefan Rueger
0e4d8fd483
Allow etc to be used in lieu of all in memory lists 2024-06-18 22:53:52 +01:00
Stefan Rueger
adf2e5b98b
Ignore but warn about verification errors in readonly memory 2024-06-18 22:37:33 +01:00
Stefan Rueger
128b82d9a8
Introduce without operator \ in memory lists 2024-06-18 22:30:50 +01:00
Stefan Rueger
847fcd5ad8
Utilise memory_list function for update_dryrun() 2024-06-18 19:12:44 +01:00
Stefan Rueger
f6e7eb7a6c
Separate function creating a memory list from a string 2024-06-18 18:49:24 +01:00
Stefan Rueger
afd65c040f
Enable verifying a single file against -U [<list>|all]✌️... 2024-06-18 18:35:53 +01:00
Stefan Rueger
bb9df2f7bc
Automatic verify on writing to multiple -U memories 2024-06-18 17:17:11 +01:00
Stefan Rueger
3b728a3449
Provide avr_verify_mem() 2024-06-17 20:05:04 +01:00
Stefan Rueger
a3347d7b0d
Enable writing input to multiple memories via -U [<list>|all]:w:... 2024-06-17 17:18:15 +01:00
Stefan Rueger
bdde862bae
Prepare update.c for multiple memory write 2024-06-17 17:00:35 +01:00
Stefan Rueger
1cc25f3284
Unify memory description for memory list 2024-06-17 15:03:08 +01:00
Stefan Rueger
bc5db547d9
De-duplicate memory list, keeping order 2024-06-17 14:44:42 +01:00
Stefan Rueger
9ab4aac045
Switch off trailing 0xff optimisation when writing memory lists to file
It is crucial not to skip empty flash memory: otherwise the output file
cannot distinguish between flash having been deliberately dropped by the
user or it having been empty.
2024-06-17 12:41:02 +01:00
Stefan Rueger
0be19da627
Simplify code using string trim functions 2024-06-17 11:08:56 +01:00
Stefan Rueger
9f8eeaa76d
Provide string trim functions 2024-06-17 10:53:57 +01:00
Stefan Rueger
1d2983e46d
Provide memstats_mem() 2024-06-17 10:29:49 +01:00
Stefan Rueger
39ed283a11
Enable writing multi-memory files via -U all:r:... or -U <list>:r:... 2024-06-16 23:54:25 +01:00
Stefan Rueger
693f5e60bd
Provide str_numc(str, c) 2024-06-16 23:06:12 +01:00
Stefan Rueger
d949c06c71
Sort fuses by offset in memory list 2024-06-16 18:41:19 +01:00
Stefan Rueger
dfc22ea966
Provide fileio_mem() function 2024-06-16 17:53:43 +01:00
Stefan Rueger
c235adf5c9
Remove in-flash/sigrow attr if no respective memories exist 2024-06-16 17:45:33 +01:00
Stefan Rueger
0e61f33739
Remove 'in sigrow' attribute from some signature/calibration memories 2024-06-16 15:38:59 +01:00
Stefan Rueger
26d1753c9e
Fix memory leak from alias_mem_desc 2024-06-16 15:07:54 +01:00
Stefan Rueger
9273bd7bd4
Extend .srec fileio() to multiple-memory input files 2024-06-16 13:29:37 +01:00
Stefan Rueger
88a9a269be
Define mem_is_prodsig() and mem_is_usersig() 2024-06-16 13:06:49 +01:00
Stefan Rueger
61a130dc64
Extend .hex fileio() to multiple-memory input files 2024-06-16 13:04:25 +01:00
Stefan Rueger
dd6fea2e3d
Clarify role of Segorder where variable 2024-06-15 13:37:23 +01:00
Stefan Rueger
41781bdd3c
Update NEWS 2024-06-15 13:17:35 +01:00
Stefan Rueger
2586ba8b25
Merge pull request #1822 from stefanrueger/exit-on-write-byte-error
Return -1 on write error
2024-06-15 12:14:17 +00:00
Stefan Rueger
7b4605c4c9
Merge pull request #1820 from stefanrueger/bootrow-elf
Extend elf format for bootrow
2024-06-15 12:14:04 +00:00
Stefan Rueger
0283517042
Merge pull request #1819 from stefanrueger/authors
Update AUTHORS list
2024-06-15 12:13:48 +00:00
Stefan Rueger
da6418ea7e
Merge pull request #1818 from stefanrueger/out-of-bounds
Downgrade out-of-range file input errors to warnings on -F
2024-06-15 12:13:19 +00:00
Stefan Rueger
6b9102b879
Fix email address in AUTHORS list 2024-06-15 13:08:48 +01:00
Stefan Rueger
3bca53f3fa
Add Jan Egil Ruud as author to jtag3 sources 2024-06-15 13:07:22 +01:00
Stefan Rueger
9279530ea5
Return -1 on write error 2024-06-14 19:16:00 +01:00
Stefan Rueger
aed7c07a6a
Extend elf format for bootrow 2024-06-13 21:30:57 +01:00
Stefan Rueger
3f73f0b88d
Update AUTHORS list 2024-06-12 23:50:41 +01:00
Stefan Rueger
98268b07ba
Make copyright notice systematic/greppable 2024-06-12 23:50:04 +01:00
Stefan Rueger
212b822657
Remove unnecessary fileoffset comparison 2024-06-12 22:50:57 +01:00
Stefan Rueger
2d2da40e5d
Remove unnecessary loadofs changes 2024-06-12 22:35:46 +01:00
Stefan Rueger
5315c620f6
Downgrade S-Record out-of-bounds error to warning on -F 2024-06-12 22:33:46 +01:00
Stefan Rueger
5fef24a7bf
Add debug message after reading hex record\n 2024-06-12 22:21:22 +01:00
Stefan Rueger
b151bb6b9c
Downgrade hex out-of-bounds error to warning on -F 2024-06-12 22:19:09 +01:00
Stefan Rueger
21802d7a69
Widen address print size 2024-06-12 21:31:00 +01:00
Stefan Rueger
ffdf66d927
Make Copyright notices greppable/systematic 2024-06-10 20:40:11 +01:00
Stefan Rueger
2754cb0d62
Update NEWS 2024-06-01 08:59:18 +01:00
Stefan Rueger
4fcb10d1ac
Merge pull request #1816 from stefanrueger/differentiate-prog-mode
Allow selection of program modes for developer options
2024-06-01 07:56:22 +00:00
Stefan Rueger
48b58746ae
Merge pull request #1815 from stefanrueger/usbhidopen-sn-sigfault
Guard serial_number access in usbhid_open() to avoid segfault
2024-06-01 07:55:30 +00:00
Stefan Rueger
0033d2d66d
Merge pull request #1814 from stefanrueger/t11-eeprom
Remove EEPROM from ATtiny11 avrdude.conf entry
2024-06-01 07:54:09 +00:00
Stefan Rueger
4e4409703c
Merge pull request #1801 from funkeleinhorn/serprog-programmer
Add serprog programmer
2024-06-01 07:53:36 +00:00
Stefan Rueger
d3c1777135
Add /d developer option for -c 2024-05-29 22:55:29 +01:00
Stefan Rueger
a7ba014d5a
Allow selection of program modes for developer options 2024-05-29 22:46:18 +01:00
Stefan Rueger
e0a5d47bbe
Guard serial_number access in usbhid_open() to avoid sigfault 2024-05-27 16:19:05 +01:00
Stefan Rueger
aa772876e5
Remove EEPROM from ATtiny11 avrdude.conf entry 2024-05-27 16:16:48 +01:00
Stefan Rueger
acf59cb61c
Convert bitclock period to frequency 2024-05-21 23:46:10 +01:00
Stefan Rueger
a986305229
Format source code in new AVRDUDE style (and minor changes) 2024-05-21 23:18:41 +01:00
Stefan Rueger
a3e4c8083e
Update NEWS 2024-05-20 12:28:53 +01:00
Stefan Rueger
0f562813f9
Merge pull request #1810 from stefanrueger/prog_modes
Warn when programmer failes to define `prog_modes`
2024-05-20 11:21:05 +00:00
Stefan Rueger
b53655d2f6
Merge pull request #1809 from stefanrueger/foo_t
Rename AVRDUDE symbol names ending in _t
2024-05-20 11:20:33 +00:00
Stefan Rueger
0f3702fc0e
Add sed script to comment about deprecated _t names 2024-05-20 12:15:34 +01:00
Stefan Rueger
32fc19bbb4
Give notice to deprecate libavrdude-avrintel.h _t types 2024-05-20 01:33:03 +01:00
Stefan Rueger
184e0c92fe
Give notice that some _t types are going to be deprecated 2024-05-20 01:23:17 +01:00
Stefan Rueger
f86ef2e89d
s/\bSegment_t\b/Segment/g 2024-05-20 01:16:09 +01:00
Stefan Rueger
8b748b3c22
s/\bpin_checklist_t\b/pin_checklist/g 2024-05-20 01:15:25 +01:00
Stefan Rueger
10d58084e4
s/\bmemtype_t\b/Memtype/g 2024-05-20 01:10:47 +01:00
Stefan Rueger
23f87637cb
s/\bmemtable_t\b/Memtable/g 2024-05-20 01:09:13 +01:00
Stefan Rueger
fe1f0b7e73
s/\bleds_t\b/Leds/g 2024-05-20 01:08:43 +01:00
Stefan Rueger
f4994dceae
s/\bexit_vcc_t\b/Exit_vcc/g 2024-05-20 01:06:56 +01:00
Stefan Rueger
f52bd57584
s/\bexit_reset_t\b/Exit_reset/g 2024-05-20 01:06:40 +01:00
Stefan Rueger
9d75341ef8
s/\bexit_datahigh_t\b/Exit_datahigh/g 2024-05-20 01:06:25 +01:00
Stefan Rueger
564b95e6f9
s/\bconntype_t\b/Conntype/g 2024-05-20 01:05:57 +01:00
Stefan Rueger
cd90f3c958
s/\bRegister_file_t\b/Register_file/g 2024-05-20 01:04:43 +01:00
Stefan Rueger
97c4f89851
s/\bConfigitem_t\b/Configitem/g 2024-05-20 01:04:28 +01:00
Stefan Rueger
d6a6cea233
s/\bValueitem_t\b/Configvalue/g 2024-05-20 01:04:14 +01:00
Stefan Rueger
cf9e291995
s/\bComponent_t\b/Component/g 2024-05-20 01:03:56 +01:00
Stefan Rueger
1ce7d82d34
s/\buPcore_t\b/Avrintel/g 2024-05-20 01:03:00 +01:00
Stefan Rueger
8e07455941
s/\bupdate_t\b/update/g 2024-05-20 01:02:39 +01:00
Stefan Rueger
8acd181f78
s/\bpinmask_t\b/pinmask/g 2024-05-20 01:02:11 +01:00
Stefan Rueger
5148038401
s/\bpindef_t\b/pindef/g 2024-05-20 00:58:08 +01:00
Stefan Rueger
e926fc1a1c
s/\bctl_stack_t\b/ctl_stack/g 2024-05-20 00:55:16 +01:00
Stefan Rueger
5b707be3de
s/\bprogrammer_type_t\b/programmer_type/g 2024-05-20 00:53:55 +01:00
Stefan Rueger
d0875fc267
Update avrintel files 2024-05-20 00:49:32 +01:00
Stefan Rueger
a98c6f436d
s/\bprogrammer_t\b/programmer/g 2024-05-20 00:47:26 +01:00
Stefan Rueger
6d136a129c
Rename struct programmer_t to PROGRAMMER 2024-05-20 00:44:02 +01:00
Stefan Rueger
39ec94f0eb
Warn whhen programmer failes to define prog_modes 2024-05-18 02:29:03 +01:00
Stefan Rueger
81d151398c
Remove value_t symbol 2024-05-18 01:46:24 +01:00
Stefan Rueger
4b53ebdeb5
s/\bWrite_mode_t\b/Write_mode/g 2024-05-18 01:45:03 +01:00
Stefan Rueger
4c05994f23
s/\bUrclock_t\b/Urclock_data/g 2024-05-18 01:44:25 +01:00
Stefan Rueger
e566919e6c
s/\btoken_t\b/token/g 2024-05-18 01:44:00 +01:00
Stefan Rueger
fc3891a1ad
s/\bSegorder_t\b/Segorder/g 2024-05-18 01:41:14 +01:00
Stefan Rueger
d26eac2433
s/\bsckoptions_t\b/sckoptions/g 2024-05-18 01:41:00 +01:00
Stefan Rueger
74e28d752a
s/\bppipins_t\b/ppipins/g 2024-05-18 01:40:46 +01:00
Stefan Rueger
2bfc2968a6
s/\bpdata_t\b/struct pdata/g 2024-05-18 01:40:31 +01:00
Stefan Rueger
55f6ee67c0
s/\bis_outside_int64_t\b/is_outside_int64/g 2024-05-18 01:36:51 +01:00
Stefan Rueger
e398b29335
s/\bFusel_t\b/Part_FL/g 2024-05-18 01:36:37 +01:00
Stefan Rueger
0f44cbf48d
s/\bfl_t\b/Intbytes/g 2024-05-18 01:36:19 +01:00
Stefan Rueger
8b78b7d63b
s/\bFlock_t\b/FL_item/g 2024-05-18 01:36:05 +01:00
Stefan Rueger
73aa17fd4b
s/\bdryrun_t\b/Dryrun_data/g 2024-05-18 01:35:49 +01:00
Stefan Rueger
01f01c36f8
s/\bdry_prog_t\b/Dry_prog/g 2024-05-18 01:35:35 +01:00
Stefan Rueger
e33ad3a20c
s/\bCfg_t\b/Cnfg/g 2024-05-18 01:35:00 +01:00
Stefan Rueger
efa4aba1b8
s/\bCfg_opts_t\b/Cfg_opts/g 2024-05-18 01:34:27 +01:00
Stefan Rueger
96218db0a9
s/\bCacheDesc_t\b/Cache_desc/g 2024-05-18 01:34:12 +01:00
Stefan Rueger
79ac24b8a4
s/\bBlhash_t\b/Bl_hash/g 2024-05-18 01:33:58 +01:00
Stefan Rueger
df1ecd34b5
s/\bavrftdi_t\b/Avrftdi_data/g 2024-05-18 01:33:39 +01:00
Stefan Rueger
514a09ad83
Update NEWS 2024-05-18 00:32:39 +01:00
Stefan Rueger
42a1fe646f
Merge pull request #1808 from stefanrueger/urboot_v8_preparation
Prepare for next urboot version
2024-05-17 23:25:20 +00:00
Stefan Rueger
bcd95ba9a1
Merge pull request #1806 from stefanrueger/programmer-not-found
Differentiate cause when programmer isn't found
2024-05-17 23:25:01 +00:00
Stefan Rueger
777241c98c
Merge pull request #1804 from stefanrueger/avrdu
Add new AVRnnDUnn parts
2024-05-17 23:24:31 +00:00
Stefan Rueger
9d02c37983
Merge pull request #1803 from stefanrueger/context
Put static variables into context structure
2024-05-17 23:23:10 +00:00
Stefan Rueger
7636581f41
Merge pull request #1802 from RoboSchmied/RoboSchmied-AGfixT132
Fix 7 typos in 4 files
2024-05-17 23:22:41 +00:00
Stefan Rueger
dc845ec388
Merge pull request #1800 from stefanrueger/silence-printf-warnings
Silence compiler warnings
2024-05-17 23:22:17 +00:00
Stefan Rueger
6962d79dc9
Update u8.0+ capability printing 2024-05-17 15:55:48 +01:00
Stefan Rueger
8075b90172
Update capability bit definitions 2024-05-17 14:49:31 +01:00
Stefan Rueger
0f9032e6c3
Set vbl level from vector number for urboot v8.0+ 2024-05-17 14:40:26 +01:00
Stefan Rueger
3b2bbb393f
Harden checks for urboot presence 2024-05-17 14:25:38 +01:00
Stefan Rueger
2dc946f263
Reserve high bit of vector number and number of pages 2024-05-17 13:01:57 +01:00
Stefan Rueger
cdf3dea749
Assert vecsz variable as const 2024-05-17 11:57:57 +01:00
Stefan Rueger
393364224f
Rename cx_t to libavrdude_context 2024-05-14 18:57:37 +01:00
Funkeleinhorn
5ae58ff728
Address code review and add set/get_sck_period() 2024-05-14 01:18:39 +02:00
Stefan Rueger
627f320efb
Make static array const in flip1.c 2024-05-10 22:21:06 +01:00
Stefan Rueger
cca61bf20e
Make static array const in serbb_posix.c 2024-05-10 22:20:46 +01:00
Stefan Rueger
512c3b6fc2
Put static variables of usb_libusb.c into context structure 2024-05-10 22:13:18 +01:00
Stefan Rueger
b4f5851e7f
Rename usb_libusb.c variables 2024-05-10 22:08:33 +01:00
Stefan Rueger
8e625510d8
Make static function greppable in usb_libusb.c 2024-05-10 21:51:16 +01:00
Stefan Rueger
3a45e1fbec
Put static variables of update.c into context structure 2024-05-10 21:48:33 +01:00
Stefan Rueger
9af06c7476
Rename static update.c variables 2024-05-10 21:45:19 +01:00
Stefan Rueger
adb4feff86
Put static variables of term.c in context structure 2024-05-10 21:38:26 +01:00
Stefan Rueger
a97f0f8eb4
Rename static read_mem 2024-05-10 21:18:13 +01:00
Stefan Rueger
fff80ea319
Rename static int i and static char *header 2024-05-10 21:09:56 +01:00
Stefan Rueger
531b00dd91
Rename last and done variables 2024-05-10 21:01:08 +01:00
Stefan Rueger
7936f0049f
Change static buffer to closed-circuit buffer in term.c 2024-05-10 19:34:22 +01:00
Stefan Rueger
a22f2d8d41
Revert to pin_to_str() and pinmask_to_str() 2024-05-10 19:28:13 +01:00
Stefan Rueger
3dcc51f5c1
Provide str_ccstrdup() to create a temporary string in closed-circuit space 2024-05-10 19:13:38 +01:00
Stefan Rueger
befcc6cf3d
Provide and use str_ccprintf() for temporary strings in closed-circuit space 2024-05-10 18:38:28 +01:00
Stefan Rueger
500ab6a460
Rope str_sprintf() into mmt_...() family of functions 2024-05-10 18:22:57 +01:00
Stefan Rueger
de82f8f7e9
Comment use of static variable as r/o cache 2024-05-10 17:58:50 +01:00
Stefan Rueger
0bc312a9cc
Rewrite str_interval() as str_ccinterval() removing static buffer 2024-05-10 17:56:27 +01:00
Stefan Rueger
bf7062cf6d
Put static variables of ser_win32.c into context structure 2024-05-10 17:38:18 +01:00
Stefan Rueger
e652726e1b
Put static variables of ser_posix.c into context structure 2024-05-10 17:28:37 +01:00
Stefan Rueger
9a908a24f9
Add argument checks for str_sprintf() 2024-05-10 17:18:54 +01:00
Stefan Rueger
366d9bb66e
Fix argument type for str_sprintf() 2024-05-10 17:18:27 +01:00
Stefan Rueger
f833691e00
Make static structure const in ser_win32.c 2024-05-10 17:14:48 +01:00
Stefan Rueger
93ba3e9feb
Make static structure const in ser_posix.c 2024-05-10 17:14:15 +01:00
Stefan Rueger
70e1869852
Fix rts cache value in serbb_setpin() for serbb_win32.c 2024-05-10 14:27:39 +01:00
Stefan Rueger
8a807b8a53
Move static variables into PDATA in serbb_win32.c 2024-05-10 14:27:15 +01:00
Stefan Rueger
fbf9a9f539
Move static variables into PDATA in serbb_posix.c 2024-05-10 14:12:54 +01:00
Stefan Rueger
b4ed989c99
Make static struct const in serbb_posix.c 2024-05-10 14:10:37 +01:00
Stefan Rueger
2c8c0a79a1
Improve error messaging 2024-05-10 13:36:52 +01:00
Stefan Rueger
9fb2f42246
Use avr_cc_buffer() instead of static buffer for returning a string 2024-05-10 13:34:25 +01:00
Stefan Rueger
3bbb0930f5
Provide safety margin for avr_cc_buffer(n) 2024-05-10 13:29:24 +01:00
Stefan Rueger
e85ecfa503
Utilise is_memset() in avrcache/developer_opts 2024-05-10 13:07:22 +01:00
Stefan Rueger
9d15a167e7
Provide avr_cc_buffer(n) for allocating n bytes in temporary buffer 2024-05-10 13:03:05 +01:00
Stefan Rueger
5dc019c721
Harden avrdude against early pmsg_...() calls 2024-05-10 12:07:46 +01:00
Stefan Rueger
80251073cd
Put static variables of ser_avrdoper.c into context structure 2024-05-10 11:00:18 +01:00
Stefan Rueger
292947d9a8
Put static variable of ppi.c into context structure 2024-05-10 10:29:38 +01:00
Stefan Rueger
443962e577
Improve error message when usb device not found in avrftdi.c 2024-05-10 00:17:09 +01:00
Stefan Rueger
c411555d27
Differentiate cause of Cannot find programmer id 2024-05-10 00:16:00 +01:00
Funkeleinhorn
e72d672859
Move serprog enable logic to pgm->initialize()
This commits moves the logic to enable the serprog programmer to be
ready for programming to the initalize() function as it seems to be the
counterpart of disable() and is called directly before programming
starts. This allows to open() a serprog programmer without blocking the
SPI bus as 0x15 S_PIN_STATE and 0x18 S_CS_MODE is only called in
initalize before the actual programming starts.
2024-05-09 22:46:39 +02:00
Stefan Rueger
9431330887
Change free() to mmt_free() 2024-05-09 19:07:43 +01:00
Stefan Rueger
4ccbf49f0f
Change pinmask_to_str() to pinmask_to_strdup()
No longer is the string returned in static space (which the next call
overwrites); instead a mmt_strdup()'d string is returned that needs
mmt_free()'ing.
2024-05-09 19:03:34 +01:00
Stefan Rueger
c5c49d7efd
Remove unused function pin_to_str()
... as it was used wrongly and led to errors. Better to use
pin_to_strdup()
2024-05-09 17:30:44 +01:00
Stefan Rueger
e6503115f7
Use pins_to_strdup() instead of pins_to_str()
The latter returns a string in a static buffer that is overwritten by the
next call. Unfortunately, this function was used more than once in
arguments of the *same* msg_error(), which would have given a wrong error
message. pins_to_strdup() returns a string to malloc'd space that needs
freeing.
2024-05-09 17:25:38 +01:00
Stefan Rueger
bf414c7c58
Make static function greppable in fileio.c 2024-05-09 11:06:50 +01:00
Stefan Rueger
c2264ad5a9
Put static variable of config_gram.y into context structure 2024-05-09 11:05:35 +01:00
Stefan Rueger
fb1a63b189
Add author to config_gram.y for contributions from 2022 2024-05-09 10:58:08 +01:00
Stefan Rueger
b25c28aea7
Guard against out-of-range pin_name in config_gram.y 2024-05-09 10:49:40 +01:00
Stefan Rueger
6d8fce594c
Put static variable of dfu.c into context structure 2024-05-08 22:32:27 +01:00
Stefan Rueger
0c565354aa
Make two static structs read-only in developer_opts.c 2024-05-08 22:23:43 +01:00
Stefan Rueger
161f763507
Consolidate functions returning a prog_modes string 2024-05-08 22:10:06 +01:00
Stefan Rueger
d425e737a4
Remove static variable in winconf.c 2024-05-08 19:58:07 +01:00
Stefan Rueger
d8d47127d9
Update avrdude.conf with new AVRnnDUnn parts 2024-05-08 19:01:00 +01:00
Stefan Rueger
40e75a447f
Update avrintel.c from new atdf files 2024-05-08 18:59:32 +01:00
Funkeleinhorn
43e998b5c4
Add documentation and clean up code 2024-05-08 18:13:24 +02:00
Funkeleinhorn
2266a0fe9c
Do enable/disable in correct functions instead of in open/close 2024-05-08 16:56:58 +02:00
Funkeleinhorn
b84b2728d0
Make CS an extended parameter 2024-05-08 15:52:30 +02:00
Stefan Rueger
14b337bb97
Put static variables of config.c into context structure 2024-05-07 23:03:02 +01:00
Stefan Rueger
1b0fb273a9
Make static variable const in avrftdi_tpi.c 2024-05-07 22:35:33 +01:00
Stefan Rueger
8a36a2f531
Put static variables of bitbang.c into context structure 2024-05-07 22:24:27 +01:00
Stefan Rueger
fa186e26a3
Put static variables of avrpart.c into context structure 2024-05-07 21:11:39 +01:00
Stefan Rueger
9f69a6e09a
Put static variables of avr.c into context structure
... and convert static memory for strings returned by avr_prog_modes()
into closed-circuit memory area in the context structure
2024-05-06 22:37:09 +01:00
Stefan Rueger
638a429337
Add const to pointer argument where possible 2024-05-05 23:06:38 +01:00
Stefan Rueger
5cf001f045
Space pointer declarations consistently 2024-05-05 23:03:41 +01:00
Stefan Rueger
59edcd8c78
Use command line programmer name in messages 2024-05-05 23:00:47 +01:00
Stefan Rueger
14e32f49c4
Adapt messages to AVRDUDE style 2024-05-05 22:57:24 +01:00
Funkeleinhorn
30d9f67ed4
Add serprog programmer
This commit adds support to program AVRs via programmers speaking
the serprog protocol used by flashrom. A programmer implementing this is
for example: https://github.com/stacksmashing/pico-serprog
2024-05-05 16:58:26 +02:00
Stefan Rueger
e35cacf3d9
Silence compiler warning when printing size_t variable 2024-05-02 17:43:15 +01:00
RoboSchmied
54cf8717f0 Fix: 7 typos
Co-authored-by: RoAGmer <no-reply@github.com>
Signed-off-by: Michael Seibt <github@roboschmie.de>
2024-05-02 00:25:16 +02:00
Stefan Rueger
8dd0932302
Silence compiler warnings 2024-04-28 21:29:40 +01:00
Joerg Wunsch
fcfe327c8a Merge remote-tracking branch 'upstream/main' into swig_libavrdude 2024-04-28 17:11:08 +02:00
mcuee
37ac6ebaa0
macOS autotools build fix 2024-04-28 20:12:12 +08:00
Stefan Rueger
c295bcc630
Update NEWS 2024-04-28 12:07:17 +01:00
mcuee
3bfcd01309
Add macOS autotools to github action (#1798)
* Update build.yml to add autotools build for macOS

* Update build.yml to use /opt/homebrew
2024-04-28 12:06:26 +01:00
Stefan Rueger
55f7da7fe3
Fix MSVC compilation errors 2024-04-28 12:01:54 +01:00
Stefan Rueger
ce8bb5fa11
Merge pull request #1794 from stefanrueger/silence-macos-ull-warning
Silence MacOS compiler warning
2024-04-28 10:47:24 +00:00
Stefan Rueger
caf4746db1
Merge pull request #1795 from stefanrueger/cx
Use magic memory tree interface throughout
2024-04-28 10:47:04 +00:00
mcuee
5f14524819
Update NEWS 2024-04-28 18:35:57 +08:00
mcuee
1848dea28f
Merge pull request #1792 from mhei/support-libgpiod-v1.4
linuxgpio: add support for libgpiod v1.4
2024-04-28 18:26:44 +08:00
mcuee
dceb55da6a
Update build.yml to use /opt/homebrew for macOS github action 2024-04-28 18:19:59 +08:00
Michael Heimpold
b6c15d783c autotools: improve configure summary regarding libgpiod
We cannot print the exact version we detected, but we
can give a hint about the "version class" at least.

Signed-off-by: Michael Heimpold <mhei@heimpold.de>
2024-04-27 23:00:54 +02:00
Michael Heimpold
ca65e84fb1 linuxgpio: fix linking with libgpiod < v1.6
Due to a copy and paste error, the required define for
using libgpido at all was not set and thus the library
was not used at all.

Signed-off-by: Michael Heimpold <mhei@heimpold.de>
2024-04-27 22:59:42 +02:00
Michael Heimpold
fcf8cd7a03 Improve cmake status messages during libgpiod detection
The standard cmake messages of pkg_check_modules might be confusing
when being used as here, i.e. when searching for the highest compatible
version.

So suppress these standard messages and print manual ones instead.

Signed-off-by: Michael Heimpold <mhei@heimpold.de>
2024-04-27 22:06:58 +02:00
Stefan Rueger
3f91c2ec39
Include libavrdude.h and avrdude.h in whereami.c 2024-04-27 15:12:23 +01:00
Stefan Rueger
8212836693
Silence MacOS compiler warning 2024-04-27 13:40:00 +01:00
mcuee
7e18c0e115
Update build.yml to install pkg-config under macOS 2024-04-27 17:19:55 +08:00
Stefan Rueger
7c26305a5b
Make static functions greppable 2024-04-26 23:53:14 +01:00
Stefan Rueger
4bd70a17fa
Make static functions greppable 2024-04-26 23:50:52 +01:00
Stefan Rueger
fe195f8810
Make static functions greppable 2024-04-26 23:48:49 +01:00
Stefan Rueger
ff7b8ca19a
Use mmt_f_free instead of free as callback function in ldestroy_cv() 2024-04-26 23:41:40 +01:00
Stefan Rueger
dcfb6a8836
Utilise magic memory tree interface for src/whereami.h 2024-04-26 23:31:23 +01:00
Stefan Rueger
934027bb65
Utilise magic memory tree interface for src/whereami.c 2024-04-26 23:31:23 +01:00
Stefan Rueger
ed5ce77a27
Utilise magic memory tree interface for src/usb_hidapi.c 2024-04-26 23:31:23 +01:00
Stefan Rueger
ab22bd04d8
Utilise magic memory tree interface for src/updi_link.c 2024-04-26 23:31:22 +01:00
Stefan Rueger
2abb780841
Utilise magic memory tree interface for src/update.c 2024-04-26 23:31:22 +01:00
Stefan Rueger
fd2b3629a9
Utilise magic memory tree interface for src/term.c 2024-04-26 23:31:22 +01:00
Stefan Rueger
8f5a08abc3
Utilise magic memory tree interface for src/stk500v2.c 2024-04-26 23:31:22 +01:00
Stefan Rueger
cea55b0533
Utilise magic memory tree interface for src/serialadapter.c 2024-04-26 23:31:21 +01:00
Stefan Rueger
67a73e609f
Utilise magic memory tree interface for src/ser_win32.c 2024-04-26 23:31:21 +01:00
Stefan Rueger
80a7fa606c
Utilise magic memory tree interface for src/ser_posix.c 2024-04-26 23:31:21 +01:00
Stefan Rueger
34efea1073
Utilise magic memory tree interface for src/pindefs.c 2024-04-26 23:31:21 +01:00
Stefan Rueger
2b43a27d0a
Utilise magic memory tree interface for src/pgm.c 2024-04-26 23:31:20 +01:00
Stefan Rueger
ac460f29ca
Utilise magic memory tree interface for src/main.c 2024-04-26 23:31:20 +01:00
Stefan Rueger
3fb246b775
Utilise magic memory tree interface for src/lists.c 2024-04-26 23:31:20 +01:00
Stefan Rueger
d561704890
Utilise magic memory tree interface for src/linuxspi.c 2024-04-26 23:31:20 +01:00
Stefan Rueger
677d88363e
Utilise magic memory tree interface for src/lexer.l 2024-04-26 23:31:19 +01:00
Stefan Rueger
cf171eeff4
Utilise magic memory tree interface for src/fileio.c 2024-04-26 23:31:19 +01:00
Stefan Rueger
493eeb272b
Utilise magic memory tree interface for src/dfu.c 2024-04-26 23:31:19 +01:00
Stefan Rueger
7d5e916793
Utilise magic memory tree interface for src/developer_opts_private.h 2024-04-26 23:31:18 +01:00
Stefan Rueger
f885173400
Utilise magic memory tree interface for src/developer_opts.c 2024-04-26 23:31:18 +01:00
Stefan Rueger
2233dced43
Utilise magic memory tree interface for src/config_gram.y 2024-04-26 23:31:18 +01:00
Stefan Rueger
16b30bc9de
Utilise magic memory tree interface for src/config.c 2024-04-26 23:31:18 +01:00
Stefan Rueger
7a8156b26d
Utilise magic memory tree interface for src/avrcache.c 2024-04-26 23:31:17 +01:00
Stefan Rueger
a1ac32f0ea
Utilise magic memory tree interface for src/avr.c 2024-04-26 23:31:17 +01:00
Michael Heimpold
9ba3a9220b linuxgpio: fix build with libgpiod < v2.0
Commit 83909096b8 introduced a regression with
libgpiod versions below 2.0.

Fix it by introducing a tiny helper function which returns
the GPIO number (offset).

Signed-off-by: Michael Heimpold <mhei@heimpold.de>
2024-04-26 22:46:35 +02:00
Michael Heimpold
6a75ac7057 linuxgpio: add gpiod_line_set_direction_input helper for libgpiod v1.4 support (refs #1782)
This ancient libgpiod version is still shipped on Ubuntu 20.04 LTS.
Add support for it by adding another helper.

Signed-off-by: Michael Heimpold <mhei@heimpold.de>
2024-04-26 22:01:52 +02:00
Stefan Rueger
db2580d17b
Update NEWS 2024-04-26 08:49:27 +01:00
Stefan Rueger
74fa943ff8
Merge pull request #1790 from stefanrueger/libavrdude_exit
Remove calls to exit() from libavrdude library functions
2024-04-26 07:44:47 +00:00
Stefan Rueger
272ec60f64
Merge pull request #1788 from mcuee/libgpiod_action
Update build.yml to include libgpiod-dev for Linux builds
2024-04-26 07:44:36 +00:00
Stefan Rueger
f5d9615a90
Remove exit() from dfu.c 2024-04-25 23:30:44 +01:00
Stefan Rueger
1ddd5bf1ff
Remove exit() from developer_opts.c 2024-04-25 23:26:45 +01:00
Stefan Rueger
5b0af7e379
Utilise magic memory tree interface for developer_opts.c 2024-04-25 23:25:18 +01:00
Stefan Rueger
e213cab09d
Utilise magic memory tree interface for avrpart.c 2024-04-25 23:14:41 +01:00
Stefan Rueger
3bc9a15853
Accept exit(1) call in avrftdi.c 2024-04-25 19:55:57 +01:00
Stefan Rueger
c7bffb4018
Ensure pgm->parseextparams()'s LIBAVRDUDE_EXIT return exits in main.c 2024-04-25 19:45:33 +01:00
Stefan Rueger
7db0b673dd
Ensure pgm->initialize()'s LIBAVRDUDE_EXIT return exits in main.c 2024-04-25 19:40:00 +01:00
Stefan Rueger
f1d7784415
Ensure avr_signature()'s LIBAVRDUDE_EXIT return exits in main.c 2024-04-25 19:33:24 +01:00
Stefan Rueger
a4a783a2e2
Percolate LIBAVRDUDE_EXIT up to avr_signature() 2024-04-25 19:32:47 +01:00
Stefan Rueger
54d770a517
Ensure pgm->open()'s LIBAVRDUDE_EXIT return exits in main.c 2024-04-25 19:11:07 +01:00
Stefan Rueger
52e4ff7513
Pass LIBAVRDUDE_EXIT return value to pgm->open() call 2024-04-25 19:00:27 +01:00
Stefan Rueger
e788c33dc5
Update NEWS 2024-04-25 18:00:43 +01:00
Stefan Rueger
9124bef8a1
Merge pull request #1786 from stefanrueger/par
Make programmer par libavrdude ready
2024-04-25 16:48:18 +00:00
Stefan Rueger
50ffb8b0e9
Merge pull request #1785 from stefanrueger/micronucleus
Make programmer micronucleus libavrdude ready
2024-04-25 16:47:54 +00:00
Stefan Rueger
9de91dea02
Merge pull request #1784 from stefanrueger/linuxspi
Make programmer linuxspi libavrdude ready
2024-04-25 16:47:29 +00:00
Stefan Rueger
d92a0248ad
Merge pull request #1783 from stefanrueger/linuxgpio
Make programmer linuxgpio libavrdude ready
2024-04-25 16:47:13 +00:00
Stefan Rueger
cfbd4ed7b6
Merge pull request #1781 from stefanrueger/stk500generic
make programmer stk500generic libavrdude ready
2024-04-25 16:46:47 +00:00
Stefan Rueger
e965aa7bcd
Merge pull request #1779 from stefanrueger/pickit2
Make programmer pickit2 libavrdude ready
2024-04-25 16:46:00 +00:00
Stefan Rueger
8068aaedc1
Merge pull request #1778 from stefanrueger/ft245r
Make programmer ft245r libavrdude ready
2024-04-25 16:45:29 +00:00
Stefan Rueger
4c3d709b44
Merge pull request #1776 from stefanrueger/flip2
Utilise magic memory tree interface for flip2.c
2024-04-25 16:45:09 +00:00
Stefan Rueger
59a8e38bfe
Merge pull request #1775 from stefanrueger/flip1
Utilise magic memory tree interface for flip1.c
2024-04-25 16:44:50 +00:00
Stefan Rueger
dbc4aa1286
Merge pull request #1774 from stefanrueger/teensy
Utilise magic memory tree interface for teensy.c
2024-04-25 16:44:22 +00:00
Stefan Rueger
a9934e9e0f
Merge pull request #1773 from stefanrueger/serialupdi
Utilise magic memory tree interface for serialupdi.c
2024-04-25 16:43:55 +00:00
Stefan Rueger
c783e8ca04
Merge pull request #1772 from stefanrueger/jtag3
Make programmer jtag3 libavrdude ready
2024-04-25 16:43:26 +00:00
Stefan Rueger
763a0fdfac
Merge pull request #1771 from stefanrueger/jtagmkII
Make programmer jtagmkII libavrdude ready
2024-04-25 16:43:11 +00:00
Stefan Rueger
dcecfc2f29
Merge pull request #1770 from stefanrueger/jtagmkI
Make programmer jtagmkI libavrdude ready
2024-04-25 16:42:49 +00:00
Stefan Rueger
6643cd82a3
Merge pull request #1768 from stefanrueger/stk500v2.c
Make programmer stk500v2 libavrdude ready
2024-04-25 16:42:34 +00:00
Stefan Rueger
5125340b31
Merge pull request #1767 from stefanrueger/stk500
Make programmer stk500 (v1) libavrdude ready
2024-04-25 16:42:09 +00:00
Stefan Rueger
a11a45837b
Merge pull request #1766 from stefanrueger/xbee
Make programmer xbee libavrdude ready
2024-04-25 16:41:47 +00:00
Stefan Rueger
d950587108
Merge pull request #1765 from stefanrueger/wiring
Utilise magic memory tree interface for wiring.c
2024-04-25 16:41:04 +00:00
Stefan Rueger
cbe4e86c67
Merge pull request #1764 from stefanrueger/usbtiny
Utilise magic memory tree interface for usbtiny.c
2024-04-25 16:40:48 +00:00
Stefan Rueger
ade6a8d8e7
Merge pull request #1763 from stefanrueger/usbasp
Make programmer usbasp libavrdude ready
2024-04-25 16:40:25 +00:00
Stefan Rueger
9fa861f8fa
Merge pull request #1762 from stefanrueger/buspirate
Utilise magic memory tree interface for buspirate.c
2024-04-25 16:39:15 +00:00
Stefan Rueger
ff4dea437e
Merge branch 'main' into buspirate 2024-04-25 16:33:17 +00:00
Stefan Rueger
9eaacf46ba
Merge pull request #1761 from stefanrueger/urclock
Utilise magic memory tree interface for urclock.c
2024-04-25 16:32:01 +00:00
Stefan Rueger
b1c5bac501
Merge pull request #1760 from stefanrueger/dryrun
Utilise magic memory tree interface for dryrun.c
2024-04-25 16:31:39 +00:00
Stefan Rueger
ff7ab85983
Merge pull request #1759 from stefanrueger/ch341a
Make programmer ch341a libavrdude ready
2024-04-25 16:31:16 +00:00
Stefan Rueger
b4bbf30bf9
Merge pull request #1758 from stefanrueger/mmt-avr910
Make programmer avr910 libavrdude ready
2024-04-25 16:30:59 +00:00
Stefan Rueger
5ce6dab459
Merge pull request #1756 from stefanrueger/butterfly
Make butterfly programmer libvrdude ready
2024-04-25 16:30:38 +00:00
Stefan Rueger
0833ce83f2
Merge pull request #1754 from stefanrueger/no-format-zero-length
Remove gcc warning when printf format is ""
2024-04-25 16:29:44 +00:00
Stefan Rueger
51bea2a7f7
Merge pull request #1753 from stefanrueger/stk500-v1-eeprom
Make default EEPROM readback values 0xff for STK500 v1 programmer
2024-04-25 16:28:11 +00:00
Stefan Rueger
5e43b76bd8
Merge pull request #1752 from stefanrueger/static-avrftdi
Make avrftdi type programmers libavrdude ready
2024-04-25 16:27:05 +00:00
Stefan Rueger
9d53f49d0c
Adjust spacing to file style 2024-04-25 17:24:35 +01:00
stefanrueger
df03d93221
Lower some messages to notice/debug level 2024-04-25 15:05:35 +00:00
stefanrueger
3cdaf80b28
Fix NULL access in string argument of msg_() 2024-04-25 14:55:34 +00:00
stefanrueger
490d2b87ac
Revise frequency messages 2024-04-25 14:42:25 +00:00
stefanrueger
b3175d0820
Utilise magic memory tree interface for strutil.c 2024-04-25 14:27:46 +00:00
stefanrueger
d5af013cc2
Provide str_frq() returning malloc'd frequency string with unit 2024-04-25 14:15:20 +00:00
Stefan Rueger
2c747dc0be
Fix tpi byte write to fuse/lock bits for usbasp 2024-04-24 11:24:25 +01:00
mcuee
e17ee8dbf8
Update build.yml to include libgpiod-dev for Linux builds 2024-04-23 21:28:06 +08:00
Stefan Rueger
e014cfc9b0
Render double teardown() harmless in avrftdi.c 2024-04-22 16:15:32 +01:00
Stefan Rueger
9278b5655d
Return LIBAVRDUDE_EXIT instead of exit() 2024-04-22 16:12:22 +01:00
Stefan Rueger
7cc31eb778
Render double teardown() harmless in avr910.c 2024-04-22 15:59:26 +01:00
Stefan Rueger
1538f3f811
Return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:58:27 +01:00
Stefan Rueger
9aeeefdfc6
Render double teardown() harmless in wiring 2024-04-22 15:47:55 +01:00
Stefan Rueger
cb10e6b167
Render double teardown() harmless in usbtiny 2024-04-22 15:47:55 +01:00
Stefan Rueger
0006b95501
Render double teardown() harmless in teensy 2024-04-22 15:47:54 +01:00
Stefan Rueger
f61f6e6f02
Render double teardown() harmless in serialupdi 2024-04-22 15:47:54 +01:00
Stefan Rueger
e6017fecb6
Render double teardown() harmless in stk500v2 2024-04-22 15:47:54 +01:00
Stefan Rueger
2f334c90ed
Render double teardown() harmless in usbasp 2024-04-22 15:47:54 +01:00
Stefan Rueger
20c5bd4608
Render double teardown() harmless in pickit2 2024-04-22 15:47:53 +01:00
Stefan Rueger
04002c1070
Render double teardown() harmless in jtagmkII 2024-04-22 15:47:53 +01:00
Stefan Rueger
1442f2a5dc
Render double teardown() harmless in jtagmkI 2024-04-22 15:47:53 +01:00
Stefan Rueger
307a7d8932
Render double teardown() harmless in ft245r 2024-04-22 15:47:52 +01:00
Stefan Rueger
0e97176316
Render double teardown() harmless in flip2 2024-04-22 15:47:52 +01:00
Stefan Rueger
502ce32e5c
Render double teardown() harmless in flip1 2024-04-22 15:47:52 +01:00
Stefan Rueger
7af2edaca0
Render double teardown() harmless in jtag3 2024-04-22 15:47:52 +01:00
Stefan Rueger
74b9a3a321
Render double teardown() harmless in buspirate 2024-04-22 15:47:51 +01:00
Stefan Rueger
9bbbe39f4f
Render double teardown() harmless in ch341a 2024-04-22 15:47:51 +01:00
Stefan Rueger
167e9a9e48
Render double teardown() harmless in butterfly 2024-04-22 15:47:51 +01:00
Stefan Rueger
a87e817a2f
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:47 +01:00
Stefan Rueger
9d76a3619c
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:47 +01:00
Stefan Rueger
18837e7984
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:47 +01:00
Stefan Rueger
d25289f87e
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:47 +01:00
Stefan Rueger
9000edf03f
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:46 +01:00
Stefan Rueger
7bd27ff157
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:46 +01:00
Stefan Rueger
1f4dbe8d40
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:46 +01:00
Stefan Rueger
a5ce726a8a
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:46 +01:00
Stefan Rueger
add771e7ef
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:45 +01:00
Stefan Rueger
bedfaed6c6
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:45 +01:00
Stefan Rueger
fcc978da69
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:45 +01:00
Stefan Rueger
7e35cc6103
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:45 +01:00
Stefan Rueger
367a0723f4
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:44 +01:00
Stefan Rueger
6c05d3f72b
return LIBAVRDUDE_EXIT instead of exit(0) 2024-04-22 15:17:40 +01:00
Stefan Rueger
7ddb7500aa
Utilse magic memory tree interface 2024-04-22 14:05:56 +01:00
Stefan Rueger
bf386c6639
Make static table const 2024-04-22 14:03:09 +01:00
Stefan Rueger
9f22855abe
Remove exit(0) call from programmer micronucleus 2024-04-22 14:00:02 +01:00
Stefan Rueger
76b4bf1fd6
Utilse magic memory tree interface 2024-04-22 13:58:54 +01:00
Stefan Rueger
38d8bf0b7a
Remove exit from programmer code in linuxspi.c 2024-04-22 13:47:46 +01:00
Stefan Rueger
bd730da36b
Utilise magic memory tree interface 2024-04-22 13:45:23 +01:00
Stefan Rueger
d0a21c17d1
Move static variables to PDATA for linuxspi.c 2024-04-22 13:41:26 +01:00
Stefan Rueger
8515704b1c
Utilise magic memory tree interface for linuxgpio 2024-04-22 13:03:20 +01:00
Stefan Rueger
83909096b8
Add PDATA to programmer linuxgpio and move static variables there 2024-04-22 12:57:20 +01:00
Stefan Rueger
28a9587858
Remove static variable in stk500generic.c 2024-04-22 11:54:43 +01:00
Stefan Rueger
569e74365f
Separate function pointer initialisation out from pgm_new()
... so that an existing programmer can be re-initialised with different
functions.
2024-04-22 11:33:20 +01:00
Stefan Rueger
c7368a41ec
Remove exit() call from flip2.c 2024-04-22 10:48:24 +01:00
Stefan Rueger
45c78d76f4
Remove exit(0) call from flip1.c 2024-04-22 10:46:30 +01:00
Stefan Rueger
4f5d54e527
Utilise magic memory tree interface for pickit2.c 2024-04-21 23:15:38 +01:00
Stefan Rueger
b2160da192
Move static variable to PDATA 2024-04-21 21:21:58 +01:00
Stefan Rueger
d4c71de80a
Update programmer description 2024-04-21 19:48:40 +01:00
Stefan Rueger
b4ba0fbd96
Utilise magic memory tree interface and fix potential memory leak 2024-04-21 19:40:32 +01:00
Stefan Rueger
a7d2fd2ba8
Provide PDATA and move static variables into that space 2024-04-21 18:51:15 +01:00
Stefan Rueger
01a259c36a
Utilise magic memory tree interface for flip2.c 2024-04-21 17:47:13 +01:00
Stefan Rueger
298d59004b
Define programmer functions static 2024-04-21 17:39:23 +01:00
Stefan Rueger
531e51827c
Define programmer functions static 2024-04-21 17:28:58 +01:00
Stefan Rueger
afed7bfc6c
Utilise magic memory tree interface for flip1.c 2024-04-21 17:27:12 +01:00
Stefan Rueger
9d63a9aa97
Utilise magic memory tree interface for teensy.c 2024-04-21 16:51:31 +01:00
Stefan Rueger
00cc9718ad
Utilise magic memory tree interface for serialupdi.c 2024-04-21 16:43:09 +01:00
Stefan Rueger
74bce432e4
Utilise magic memory tree interface for jtagmkI.c 2024-04-21 16:20:49 +01:00
Stefan Rueger
422488de9c
Make static functions greppable 2024-04-21 16:10:50 +01:00
Stefan Rueger
c41fa3db2b
Utilise magic memory tree interface for jtagmkII.c 2024-04-21 16:05:46 +01:00
Stefan Rueger
db4bf53480
Revoke comment 2024-04-21 15:37:09 +01:00
Stefan Rueger
97e659924a
Move static buffer to PDATA 2024-04-21 15:29:47 +01:00
Stefan Rueger
34dd5d25d6
Make static tables const or local 2024-04-21 15:21:49 +01:00
Stefan Rueger
15e318f05a
Make static functions greppable 2024-04-21 15:10:54 +01:00
Stefan Rueger
0f3bb6a32e
Utilise magic memory tree interface for jtag3.c 2024-04-21 15:05:08 +01:00
Stefan Rueger
0b07a1e962
Move static signature_cache to PDATA 2024-04-21 14:43:00 +01:00
Stefan Rueger
8211e39d80
Make static functions greppable 2024-04-21 14:36:11 +01:00
Stefan Rueger
b9801e8d66
Use mmt_free() instead of free() 2024-04-21 14:28:38 +01:00
Stefan Rueger
cf24313d7a
Rewrite usbasp_tpi_write_byte() using tpi WORD_WRITE
The data sheet wants a single word write, not a write block
2024-04-21 13:25:24 +01:00
Stefan Rueger
6a9e3b246d
Change variable name 2024-04-21 12:51:25 +01:00
Stefan Rueger
0f7c6a1d46
Add sanity checks 2024-04-20 02:00:08 +01:00
Stefan Rueger
8e836461e1
Make static table const 2024-04-20 01:55:29 +01:00
Stefan Rueger
ce65a1484f
Make static table local const 2024-04-20 01:54:47 +01:00
Stefan Rueger
0f62968695
Move static table to local data and simplify function 2024-04-20 01:22:23 +01:00
Stefan Rueger
cae0815d15
Make static functions greppable 2024-04-20 01:08:00 +01:00
Stefan Rueger
f1105afb47
Add mmt_free() definition 2024-04-20 01:07:26 +01:00
Stefan Rueger
640e9515ea
Utilise magic memory tree interface for stk500v2.c 2024-04-20 01:03:36 +01:00
Stefan Rueger
0f6d07323d
Utilise magic memory tree interface for stk500.c 2024-04-19 22:30:47 +01:00
Stefan Rueger
1a8a974882
Make static tables const 2024-04-19 22:29:17 +01:00
Stefan Rueger
f31d107d81
Utilise magic memory tree interface for xbee.c 2024-04-19 22:22:53 +01:00
Stefan Rueger
b2e71428b9
Move static serdev structure into stk500's PDATA area 2024-04-19 22:10:54 +01:00
Joerg Wunsch
76efcb614c Stylistic change: move inline comments to column 32 2024-04-19 22:43:57 +02:00
Stefan Rueger
94714812d7
Make static table const 2024-04-19 20:27:00 +01:00
Stefan Rueger
0bf59aa87b
Update programmer description 2024-04-19 19:43:15 +01:00
Stefan Rueger
1e417efde1
Utilise magic memory tree interface for wiring.c 2024-04-19 19:39:24 +01:00
Stefan Rueger
c2c1bda3c5
Utilise magic memory tree interface for usbtiny.c 2024-04-19 19:33:39 +01:00
Stefan Rueger
33e7a56b1c
Update programmer description 2024-04-19 19:16:37 +01:00
Stefan Rueger
fd0838b395
Implement usbasp_tpi_write_byte() as draft 2024-04-19 18:03:13 +01:00
Stefan Rueger
68ade64f46
Utilise magic memory tree interface for usbasp.c 2024-04-19 16:58:45 +01:00
Stefan Rueger
53d4a45dfb
Make static table const 2024-04-19 16:49:19 +01:00
Stefan Rueger
b815d9e783
Move static variables to PDATA space in usbasp.c 2024-04-19 16:47:29 +01:00
Stefan Rueger
d651e31b98
Improve usbasp_tpi_read_byte() error messaging 2024-04-19 16:08:43 +01:00
Stefan Rueger
2ce7580977
Utilise magic memory tree interface for buspirate.c 2024-04-19 12:48:24 +01:00
Stefan Rueger
a942b31a98
Make static functions greppable 2024-04-19 12:42:32 +01:00
Stefan Rueger
af5f7ee565
Utilise magic memory tree interface for urclock.c 2024-04-19 12:35:39 +01:00
Stefan Rueger
345e4a985c
Utilise magic memory tree interface for dryrun.c 2024-04-19 12:24:37 +01:00
Stefan Rueger
54130a72f5
Update CH341A programmer description 2024-04-19 12:17:53 +01:00
Stefan Rueger
ec5dabcfb0
Utilise magic memory tree interface for ch341a.c 2024-04-19 12:12:09 +01:00
Stefan Rueger
8f951babce
Move static variables to PDATA 2024-04-19 12:10:04 +01:00
Stefan Rueger
68d8023b6c
Utilise magic memory tree interface for avr910.c 2024-04-18 21:03:30 +01:00
Stefan Rueger
7e3854ff2f
Do not use m->desc for memory type: use mem_is_...(m) 2024-04-18 20:58:57 +01:00
Stefan Rueger
f5881e9cd2
Rework butterfly_paged_load()
- Return correct value (number of bytes loaded)
  - Do not use m->desc for memory type: use mem_is_...(m)
2024-04-18 20:56:22 +01:00
Stefan Rueger
924c9b0a38
Rework butterfly_paged_write()
- Return correct value (number of bytes written)
  - Do not use m->desc for memory type: use mem_is_...(m)
2024-04-18 20:47:25 +01:00
Stefan Rueger
45b4f7ab09
Provide PDATA cache for avr910_read_byte_flash() 2024-04-18 20:31:49 +01:00
Stefan Rueger
9ed9053671
Provide meaningful pgm->disable() method
It is customary that pgm->disable() leaves programming mode; as such it is
the closing part of pgm->program_enable()
2024-04-18 19:28:34 +01:00
Stefan Rueger
04956f0dc7
Provide meaningful program_enable() method 2024-04-18 19:24:46 +01:00
Stefan Rueger
89473ccf17
Change error message and return value of avr910_vfy_cmd_sent() 2024-04-18 19:21:47 +01:00
Stefan Rueger
bf37d34002
Explicitly ignore error checks for avr910_drain() 2024-04-18 19:20:17 +01:00
Stefan Rueger
70901f95d8
Check return value of avr910_recv() calls for errors 2024-04-18 19:17:42 +01:00
Stefan Rueger
2e0f666b07
Avoid duplication of butterfly_recv() error message 2024-04-18 18:59:07 +01:00
Stefan Rueger
47e46fc97c
Check return value of avr910_send() calls for errors 2024-04-18 18:55:38 +01:00
Stefan Rueger
3de5457718
Utilise magic memory tree interface for butterfly.c 2024-04-18 18:05:03 +01:00
Stefan Rueger
5e221a1fd6
Rework butterfly_write_byte()
- Refactor flash/eeprom writes
  - Emphasise flash/userrow writes not implemented
  - Invalidate read cache (lest it gets forgotten)
2024-04-18 18:05:03 +01:00
Stefan Rueger
010969c197
Rework butterfly_paged_write()
- Invalidate read cache
  - Return correct value (number of bytes written)
  - Do not use m->desc for memory type: use mem_is_...(m)
2024-04-18 18:05:03 +01:00
Stefan Rueger
f027e70cdf
Rework butterfly_paged_load()
- Return correct value (number of bytes loaded)
 - Do not use m->desc for memory type: use mem_is_...(m)
2024-04-18 18:05:02 +01:00
Stefan Rueger
9305dae3f5
Move static cache to PDATA for butterfly_read_byte_flash() 2024-04-18 18:05:02 +01:00
Stefan Rueger
7de846054a
Provide meaningful program_enable() method
It is customary for progammers to provide an enter-programming-mode method
in  the program_enable() and a leave-programming-mode in disable(). The
former was missing and might be useful for libavrdude applications.
2024-04-18 18:05:02 +01:00
Stefan Rueger
7c958ea306
Change error message in butterfly_vfy_cmd_sent() 2024-04-18 18:05:02 +01:00
Stefan Rueger
470d07c959
Explicitly ignore error checks for butterfly_drain() 2024-04-18 18:05:01 +01:00
Stefan Rueger
cfb040f184
Check return value of butterfly_recv() calls for errors 2024-04-18 18:05:01 +01:00
Stefan Rueger
e579554874
Check return value of butterfly_send() calls for errors 2024-04-18 18:04:49 +01:00
Stefan Rueger
5223750361
Inform gcc that avrdude_message2() has printf-like varargs 2024-04-18 10:58:35 +01:00
Joerg Wunsch
2026142511 Silence Qt warning
Was:

Attribute Qt::AA_ShareOpenGLContexts must be set before QCoreApplication is created.
2024-04-17 23:08:23 +02:00
Joerg Wunsch
0b93a165e8 Allow editing the programmer selection combobox
This offers the same feature as for the device selection: typing
a partial programmer name filters the dropdown list to all
possible matches for a programmer.
2024-04-17 22:52:21 +02:00
Joerg Wunsch
8662c68668 Add a category "bootloaders" in the programmer selection dialog
This category triggers for all programmers that have PM_SPM
set.
2024-04-17 22:39:43 +02:00
Stefan Rueger
8f15ec46dc
Remove gcc warning when printf format is ""
This warning only occurs when checking the msg_...() functions for having
the correct parameters. The way I do that is by replacing the avrdude.h
file with one that #defines the msg_... functions to printf for which the
compiler knows which paramaters of which type are expected given that the
format is a string constant. That check, however, produces false alarms
which are not helpful.

This commit switches these unhelpful warnings from gcc off.
2024-04-17 19:50:28 +01:00
Stefan Rueger
4b2c99470a
Make default eeprom readback values 0xff for STK500 v1 programmer 2024-04-17 19:12:48 +01:00
Stefan Rueger
73eb16f3c8
Simplify FTDI port printing 2024-04-17 18:36:33 +01:00
Stefan Rueger
33525eff91
Simplify printed string length computation 2024-04-17 18:36:32 +01:00
Stefan Rueger
a65486b756
Simplify snprintf format 2024-04-17 18:36:32 +01:00
Stefan Rueger
bd42d5c07b
Reduce scope of pinno variable 2024-04-17 18:36:32 +01:00
Stefan Rueger
be1f7ea5f1
Simplify interface expression 2024-04-17 18:36:32 +01:00
Stefan Rueger
faa1e22fc9
Introduce mmt_free() to free mmt_...() allocated memory 2024-04-17 18:36:31 +01:00
Stefan Rueger
c30a7b2005
Update error message for failed memory allocation 2024-04-17 18:36:31 +01:00
Stefan Rueger
3a41205507
Use mmt_malloc() for PDATA allocation 2024-04-17 18:36:31 +01:00
Stefan Rueger
6d41e6baa3
Move static struct pindef_t valid_pins_others to PDATA 2024-04-17 18:36:31 +01:00
Stefan Rueger
05b1226765
Move static struct pindef_t valid_pins[4] to PDATA 2024-04-17 18:36:30 +01:00
Stefan Rueger
925cb7c8af
Adjust white space to exiting costum 2024-04-17 18:36:30 +01:00
Stefan Rueger
47fa0d2dff
Move static struct pindef_t valid_pins to PDATA 2024-04-17 18:36:30 +01:00
Stefan Rueger
8fddac70eb
Ensure valid buf access 2024-04-17 18:36:30 +01:00
Stefan Rueger
f6842c9000
Bring avrftdi's messaging into the msg_...() fold 2024-04-17 18:36:29 +01:00
Stefan Rueger
a3189140e1
Simplify format selection 2024-04-17 18:35:41 +01:00
Stefan Rueger
b71c29897b
Protect buffer from potential overflow 2024-04-17 17:49:30 +01:00
Stefan Rueger
1bfbc2771d
Move static char str[] to PDATA 2024-04-17 17:49:12 +01:00
Stefan Rueger
1ae28a7efa
Make static functions greppable 2024-04-17 12:18:33 +01:00
Stefan Rueger
8fe729f0a2
Update NEWS 2024-04-17 00:40:54 +01:00
Stefan Rueger
5858898846
Merge pull request #1750 from stefanrueger/static-buspirate
Move static buffer to PDATA region in buspirate.c
2024-04-17 00:38:52 +01:00
Stefan Rueger
6aece29a34
Merge pull request #1749 from stefanrueger/deprecated
Remove deprecated ucr2 part
2024-04-17 00:38:37 +01:00
Stefan Rueger
4761a701ad
Merge pull request #1725 from mhei/support-for-libgpiodv2
Add support for libgpiod v2+ API
2024-04-17 00:38:24 +01:00
Stefan Rueger
8231b36f85
Merge pull request #1733 from therealdreg/buspirate-hiz-and-pullups
Add buspirate hiz and pullups feature
2024-04-17 00:37:48 +01:00
Stefan Rueger
b00d601f92
Use mmt_malloc() macro instead of cfg_malloc() function 2024-04-17 00:25:07 +01:00
Stefan Rueger
c930a27871
Introduce magic memory tree 2024-04-17 00:23:39 +01:00
Joerg Wunsch
5d7d0737eb Improve the device selection list
While typing the combobox text, the validator adapts the contents of
the dropdown menu to only those entries that match the text typed.
So one can enter "64", and will only be presented all device that
have a 64 in their name (which are a few more than just those with
64 KiB of flash).
2024-04-16 22:29:05 +02:00
Joerg Wunsch
1b74b0f260 Reduce size of dropdown list to 20
50 seemed to be a bit too large for some displays.
2024-04-16 22:29:05 +02:00
Dreg
cfc5c937d7
Update avrdude.texi 2024-04-16 02:39:52 +02:00
Dreg
97cd1aa541
Update avrdude.texi better doc
better doc
2024-04-16 02:37:35 +02:00
Stefan Rueger
9850a8f484
Use cfg_malloc() instead of calloc() 2024-04-16 00:54:59 +01:00
Stefan Rueger
cff9d889ed
Make static const array local 2024-04-15 11:53:04 +01:00
Stefan Rueger
a5a94a08df
Make static functions greppable 2024-04-15 11:42:22 +01:00
Stefan Rueger
af8d832f38
Make string variables local const 2024-04-15 11:39:20 +01:00
Joerg Wunsch
8ebf2ee631 Convert help text to HTML
Turns out PySide2 doesn't have a setMarkdown() method for the text widgets,
only setHtml().
2024-04-15 08:00:41 +02:00
Stefan Rueger
94561c8205
Move static buffer to PDATA region 2024-04-14 22:56:18 +01:00
Michael Heimpold
ea701bc2f5 Add support for libgpiod v2+ API
libgpiod in version 2 or above introduced an API change which results
in compile error with the current code.

This commit adds some glue magic for the newer versions and
tries to detect the used libgpiod version based on the information
available in the pkg-config files.

At the moment, this eliminates the possibility to statically link
against this library.

Signed-off-by: Michael Heimpold <mhei@heimpold.de>
2024-04-14 23:45:26 +02:00
Stefan Rueger
6488cb6102
Remove deprecated ucr2 part
It's been deprecated for a while now.
2024-04-14 22:24:12 +01:00
Joerg Wunsch
69267f365c Only enable the device selection OK button of validator is OK
While the combobox validator prevents "QValidator.Invalid"
characters to be entered, the user could still get away with
any string that is considered "QValidator.Intermediate". In
that caes, disable the OK button of the button box so the
(intermediate) result could not be passed on.
2024-04-14 22:54:44 +02:00
Joerg Wunsch
ec3ecc6169 Enlarge the device list
The default of 10 entries is way too small.
2024-04-14 22:54:15 +02:00
Joerg Wunsch
2784f73721 Improve device selection
Make the combo box editable, and apply a QValidator subclass
to it so the users can type partial device names.
2024-04-14 22:18:55 +02:00
Joerg Wunsch
6cb1fb03ce log() is a method, so prefix it with self. 2024-04-14 21:51:07 +02:00
Joerg Wunsch
61302b3e9c Shorten and straighten the help message a bit
Changes have been suggested by Stefan Rueger.
2024-04-14 16:38:04 +02:00
Joerg Wunsch
24718e2a9a s/dangerous/difficult/ 2024-04-14 11:39:58 +02:00
Joerg Wunsch
6440aa73d3 Review comments: stylistic changes in libavrdude.h
Remove obsolete avrdude_message().
Place inline comments at position 32.
2024-04-14 10:33:45 +02:00
Joerg Wunsch
22e4b5b3ce Add some (exemplary) warnings about dangerous fuse values
Some fuse settings on some devices may be dangerous, like
disabling ISP, or changing the /RESET pin into a GPIO.

This adds some warning examples. Still does not consider
the actual programmer connection, but that could be added
in future.
2024-04-14 10:27:30 +02:00
Joerg Wunsch
4ab7e197ea Merge branch 'main' into swig_libavrdude 2024-04-14 00:28:17 +02:00
Joerg Wunsch
4013eed998 Remove modality on help window
That way, users can operate the GUI while the help window is
displaying.
2024-04-14 00:14:58 +02:00
Stefan Rueger
428ea42634
Update NEWS 2024-04-13 12:41:16 +01:00
Stefan Rueger
1d3f028a0b
Merge pull request #1747 from stefanrueger/update-avrintel
Update avrintel files
2024-04-13 12:36:50 +01:00
Stefan Rueger
e10370e5fb
Merge pull request #1746 from stefanrueger/locate_programmer_starts_set
Check all programmer ids for exact match
2024-04-13 12:36:17 +01:00
Stefan Rueger
2ee89824e0
Merge pull request #1745 from stefanrueger/override-signature-check
Consult -F option when signature cannot be read
2024-04-13 12:35:08 +01:00
Stefan Rueger
b302e708be
Merge pull request #1741 from dl8dtl/msg_debug_fixes
Fix message levels in jtag3_print_data()
2024-04-13 12:34:22 +01:00
mcuee
d441501505
Adding arduino_packing_release github action (#1690)
Co-authored-by: Umberto Baldi <34278123+umbynos@users.noreply.github.com>
2024-04-13 12:33:09 +01:00
Stefan Rueger
ece8652162
Include <ac_cfg.h> instead of "ac_cfg.h"
See 9616b3709c
2024-04-13 00:59:26 +01:00
Stefan Rueger
1a46faaa6e
Check all ids of a programmer for exact match 2024-04-13 00:30:24 +01:00
Stefan Rueger
c53a3ed866
Match programmer names irrespective of case 2024-04-13 00:19:01 +01:00
Stefan Rueger
5361668c0e
No longer warn when part configuration disables SPI interface
SPI programming cannot disable SPI programming for the part configuration.
Hence. when another programming interface disables SPI that very same
interface can enable SPI again. The warning disabling SPI might brick the
part is therefore incorrect.
2024-04-12 23:28:35 +01:00
Stefan Rueger
3129ba277b
Update avrintel based on current atdf 2024-04-12 23:22:17 +01:00
Stefan Rueger
fdfa0ac10e
Consult -F option when signature cannot be read 2024-04-12 17:22:22 +01:00
Joerg Wunsch
82928d377d Fix message levels in jtag3_print_data()
These are debugging functions, and not supposed to print at
MSG_INFO level.
2024-04-08 22:20:15 +02:00
Joerg Wunsch
5227dbe689 Fix message levels in jtag3_print_data()
These are debugging functions, and not supposed to print at
MSG_INFO level.
2024-04-08 22:17:51 +02:00
Joerg Wunsch
89d959b6bb Workaround for a quite strange UnicodeDecodeError
Not really understood, but with level MSG_TRACE2, on a Curiosity Nano
board, I get two instances of unicode decode errors within the trace
messages. Trying to debug them did not yield any useful result, but
catching the exception, and enforcing the type to be "str" appear to
be able to continue.

Maybe an internal bug of my Python interpreter, don't know.
2024-04-08 22:03:30 +02:00
Joerg Wunsch
058f900ed2 Enlarge the fuses dialog
Virtually none of the messages would have fit into the small
initial size. Still looking for a more automatic solution,
but enlarging it might be a good first step to get things
better visible.
2024-04-07 23:43:16 +02:00
Joerg Wunsch
e39ad2c1ca Our probe is actually for SWIG + Python3
Indicate so in the final configuration overview.
2024-04-07 23:20:59 +02:00
Joerg Wunsch
57bab83374 Replace deprecated Python distutils by "site" module. 2024-04-07 15:32:45 +02:00
Joerg Wunsch
aab76b9f29 First attempt of establishing an installation process
It installs the Python and .ui files under datadir/avrdude/
(e.g. /usr/bin/share/avrdude/), and a batch or shell script
to call it as avrdude-gui into the normal bin directory.
2024-04-07 13:52:55 +02:00
Joerg Wunsch
01ed0174d5 If the fuse has an alias name, use that as display name
avrX uses names like 'syscfg0' and so on in the datasheet, but
we refer to them as 'fuse<N>' internally.
2024-04-07 10:40:45 +02:00
Joerg Wunsch
56246e5c1c Use correct Python3 CMake variables 2024-04-07 10:09:11 +02:00
Joerg Wunsch
9a8d5c1328 Replace PYTHONLIBS by PYTHON3 in CMakeLists.txt
https://cmake.org/cmake/help/latest/module/FindPython3.html
2024-04-07 09:55:15 +02:00
Joerg Wunsch
b39332d636 Probe for both, PySide6 as well as PySide2
The GUI is supposed to work on both versions.
2024-04-07 08:25:00 +02:00
Joerg Wunsch
b800d16481 Make the AVR logo class-internal data
This allows it to place it at the bottom of the file, so
the top area is not cluttered with lots of binary data.
2024-04-07 08:19:07 +02:00
Joerg Wunsch
6fb142dfee Mention the % pattern in fuse file names. 2024-04-07 08:16:44 +02:00
Joerg Wunsch
0be9a8865d Add help text 2024-04-07 01:07:04 +02:00
Joerg Wunsch
5f3dc74553 Handle fuse names of avrX devices
For avrX devices, fuses are named according to the datasheet,
rather than their internal naming "fuse<N>". So instead, use
the "memoffset" (which corresponds to <N>).
2024-04-07 00:15:32 +02:00
Joerg Wunsch
c03480a7d9 Initialize self.pgm and self.dev 2024-04-06 13:15:27 +02:00
Joerg Wunsch
69672a8470 Handle AVRMEM_ALIAS
Aliases are interesting for generic vs. datasheet names of
avrX fuses
2024-04-05 21:58:41 +02:00
mcuee
306d948bc5
No longer need to use CMAKE_VERBOSE_MAKEFILE 2024-04-05 20:24:56 +08:00
Dreg
a5035c09a2
pup->pullups 2024-04-05 10:21:14 +02:00
stefanrueger
f2b1c7e6cd
Update NEWS 2024-04-05 17:13:23 +13:00
Stefan Rueger
89768468be
Merge pull request #1731 from mcuee/avrdude_packing_fix
To use Static Libs for macOS arduino_packing build
2024-04-05 17:11:48 +13:00
Stefan Rueger
a8097eaee3
Merge pull request #1729 from stefanrueger/timestamp
Change return type for avr_(ms|us)timestamp() to uint64_t
2024-04-05 17:10:00 +13:00
stefanrueger
08f70fe666
Update NEWS 2024-04-05 16:54:16 +13:00
David Reguera Garcia
d9391883bc Update doc for buspirate hiz and pullups 2024-04-05 02:33:15 +02:00
David Reguera Garcia
93ed53733b Add hiz and pullups feature for buspirate binary mode 2024-04-05 02:30:33 +02:00
Joerg Wunsch
74f5ec3c65 Add a fuse configuration popup
When activating the context menu in one of the fuse value lineedit
fields, a popup is constructed that shows all the options for this
fuse, as an array of comboboxes. The data for this is from
avrintel.c.
2024-04-04 13:51:48 +02:00
Joerg Wunsch
e03820be72 Add default_fuse() helper
Synthesizes default fuse value
2024-04-04 13:50:06 +02:00
Joerg Wunsch
2efc3712f8 Fix 'invalid escape sequence' warning
Backslash in regular expression is best used by writing a raw
string.
2024-04-04 07:56:51 +02:00
Joerg Wunsch
ccaa3ddae7 Add layout to askfuse.ui 2024-04-03 21:25:48 +02:00
Joerg Wunsch
dd131bb616 Add layout to about.ui 2024-04-03 21:24:28 +02:00
Joerg Wunsch
926a776fd2 Add layouts for device and programmer selection 2024-04-03 21:23:34 +02:00
Joerg Wunsch
dafff152a3 Layout the device info popup 2024-04-03 21:09:07 +02:00
Joerg Wunsch
2bd7512739 Add layouts to memories.ui 2024-04-03 19:20:19 +02:00
Joerg Wunsch
0a45c8af6a Add layout to adgui.ui
Also remove status bar - we use our logging area anyway.
2024-04-03 17:50:21 +02:00
Joerg Wunsch
35e1ad8c8f Arrange the loglevel.ui into a layout 2024-04-03 17:46:32 +02:00
Joerg Wunsch
b86120cfa3 Add some examples how to deal with that configuration list
Nice way to analyze and synthesize fuse values.
2024-04-03 09:38:00 +02:00
Joerg Wunsch
3cedbee2e7 Make the loglevel popup a modal one.
No need being able to operate elswhere while it is up.
2024-04-03 09:27:39 +02:00
Joerg Wunsch
07116d93a0 Provide access to the fuse/lock bit configuration table
Synthesize a Python list, consisting of the individual table entries
as a dictionary. The dictionary, in turn, contains a table with the
individual values.

Quiet complex.
2024-04-02 23:43:03 +02:00
Joerg Wunsch
48bbd4b160 Ask for which fuse if needed
If loading a single-byte file (no '%' in filename pattern, and
not an ELF file), ask for which fuse to load.

When saving or programming, make sure to only handle interesting
values. Users can clear a fuse data entry to have this fuse skipped.
2024-04-02 23:33:43 +02:00
Joerg Wunsch
86de67f05f Implement fuse load and save from/to file
When loading from ELF file, all fuses are considered.

% in filename will be replaced by fuse name. That way, all fuses
could be saved to a bunch of files with a single "OK".
2024-04-02 09:07:14 +02:00
Joerg Wunsch
fd8b8bba0a Skip empty fuse value fields as well 2024-04-02 07:49:28 +02:00
Joerg Wunsch
1862b1942c Implement fuse programming
Only fuses that have been edited will be programmed.
2024-04-01 23:00:53 +02:00
Joerg Wunsch
8abd91b478 Implement fuse reading and editing
Also implement a filter that filters Key_Enter events for all
QLineEdit children of the "memories" dialog, in order to only finish
line editing but not "accept" the entire dialog (thereby closing it).
2024-04-01 22:57:44 +02:00
Joerg Wunsch
d215bdc633 Populate GUI fuse labels
Walk all possible fuse memories of the device, and construct
a list of fuse labels and value entries.
2024-04-01 13:57:35 +02:00
Joerg Wunsch
8ec3dd5a42 Provide explicit attach and detach functionality for programmer
Instead of automatically attaching once the user selected device
and programmer and port, provide explict menu entries for that.

That way, pre-loaded settings from the previous session can be
activated immediately, without going through the selection
popups. Also, it ought to be possible to completely switch to
different programmers and devices within one session.
2024-04-01 09:50:58 +02:00
Joerg Wunsch
da37f095f4 Start adding fuses
Implement a "Fuses" tab, but disable all fuse entries by now.
2024-03-31 23:47:50 +02:00
Joerg Wunsch
9bef6b23ad Clone flash operations into EEPROM operations 2024-03-30 22:41:26 +01:00
Joerg Wunsch
7f09662f03 Color-code buffer full/empty 2024-03-30 22:18:24 +01:00
Joerg Wunsch
3ccc199198 Add flash_load (from file) and flash_write (to device)
This completes all operations on flash.
2024-03-30 22:07:42 +01:00
Joerg Wunsch
33100e1c4f Add tooltips to buttons 2024-03-30 21:45:04 +01:00
Joerg Wunsch
7a52571c3b Implement chip erase 2024-03-30 18:16:12 +01:00
Joerg Wunsch
f61c4d862b Track flash size when reading from device 2024-03-30 18:06:29 +01:00
Joerg Wunsch
e332c4c818 When saving flash file, ask whether to overwrite existing file 2024-03-30 17:28:52 +01:00
Joerg Wunsch
76d54804c7 Re-add MSG2_LEFT_MARGIN into the enum used in this branch 2024-03-30 09:53:18 +01:00
Joerg Wunsch
b015fc244b Merge remote-tracking branch 'upstream/main' into swig_libavrdude 2024-03-30 09:51:11 +01:00
Joerg Wunsch
4458a3c8c1 Add saving flash contents to file 2024-03-29 23:34:35 +01:00
Joerg Wunsch
8d2f3105d4 Add an AVR Logo image to the memory tab 2024-03-29 23:29:30 +01:00
Stefan Rueger
cb61171598
Merge pull request #1724 from stefanrueger/progress-reporting
Document progress reporting in source code
2024-03-30 09:26:27 +13:00
Stefan Rueger
82e45130b8
Merge branch 'main' into progress-reporting 2024-03-30 09:19:22 +13:00
stefanrueger
840a098e29
Update NEWS 2024-03-30 09:16:44 +13:00
Stefan Rueger
22a7bf9be9
Merge pull request #1728 from stefanrueger/msg2_left_margin
Provide lmsg_xyz() functions to start message at left margin
2024-03-30 09:14:14 +13:00
Joerg Wunsch
cd79957312 Fine-tune handling of flash filename given
* Accept filenames from both, edited entry as well as file
  selection dialog
* If given file already exists, examine, and find its format
* If it doesn't exist, try determining format based on suffix
2024-03-29 18:02:37 +01:00
Joerg Wunsch
896785a192 Add copyright, add some more "About" text 2024-03-29 16:31:38 +01:00
Joerg Wunsch
368b9ff14b Fix breakage introduced by previous merge
MSG_* and MSG2_* definitions need to be in libavrdude.h rather
than avrdude.h, because they are part of the public interface.
2024-03-29 16:20:51 +01:00
mcuee
9b7d4d832b
To use Static Libs for macOS arduino_packing build
This is pointed out by @umbynos during the review of PR #1690
2024-03-29 18:47:17 +08:00
Stefan Rueger
0f216357a6
Merge branch 'main' into msg2_left_margin 2024-03-29 23:24:53 +13:00
Joerg Wunsch
89bd5f321c Merge remote-tracking branch 'upstream/main' into swig_libavrdude 2024-03-29 11:06:34 +01:00
Joerg Wunsch
67867a6776 Update NEWS 2024-03-29 11:05:29 +01:00
Jörg Wunsch
8516243630
Merge pull request #1730 from stefanrueger/remove_avrdude_message
Remove unused avrdude_message()

Fixes #1719
2024-03-29 11:04:34 +01:00
Joerg Wunsch
39eea9649d Add note about why avrdude_message2() is named that way. 2024-03-29 10:23:08 +01:00
Joerg Wunsch
674128cebc Update NEWS for recent PR/issue 2024-03-29 10:18:43 +01:00
Jörg Wunsch
0ff5e84f10
Merge pull request #1727 from dl8dtl/fix-1726
Replace msg_info() by msg_debug() in jtag3_prmsg() and jtag3_prevent()

Closes #1726
2024-03-29 10:17:32 +01:00
stefanrueger
d91a48242e
Remove unused avrdude_message() 2024-03-29 19:55:34 +13:00
stefanrueger
f027493e3f
Change return type for avr_(ms|us)timestamp() to uint64_t 2024-03-29 19:42:07 +13:00
stefanrueger
a26c4343dc
Keep vertical tab at start of format string as conditional new line 2024-03-29 13:56:17 +13:00
stefanrueger
7f9f82de2e
Add MSG2_LEFT_MARGIN flag in lieu of \v messaging convention
Some messaging needs a functionality to end an open line, so that the next
message starts at the left margin, ie, the ability to print a \n if and
only if the last printed character was not already a \n.

This used to be effected by \v as first char in the message format.

This commit introduces a dedicated lmsg_xyz() set of messaging functions
that utilises a MSG2_LEFT_MARGIN flag to enforce a left margin start for
the message.
2024-03-29 13:43:22 +13:00
Joerg Wunsch
5b64a79dc4 Implement a config file
This saves and loads some of the settings to persistent
storage, so they are available pre-configured at next
startup.
2024-03-28 22:44:21 +01:00
Joerg Wunsch
bc8f008105 Do not attempt to add <br> if there is no HTML text
Happens for trace messages.
2024-03-28 15:37:56 +01:00
Joerg Wunsch
f091a1d578 Only allow access to flash and EEPROM tabs after reading signature
Also mark by green or red color if the signature matches the
selected device, and log a if they do not match.

Tune the error and warning colors a bit.
2024-03-28 15:29:34 +01:00
Joerg Wunsch
ad03989349 Make the loglevel radiobuttons automatically accept the popup.
There's not much point in requiring the user to explicitly press an
"OK" button for something that simple as switching log levels.
2024-03-28 12:48:14 +01:00
Joerg Wunsch
9aaf86466b Move cursor to end of logging area
That way, the most recent message is always visible.
2024-03-28 11:32:26 +01:00
Joerg Wunsch
55acef957d Fix HTML logging
Append <br> only if a newline is supposed to be emitted.
2024-03-28 11:30:39 +01:00
Joerg Wunsch
d42da3d4da Merge branch 'fix-1726' into swig_libavrdude 2024-03-28 10:21:10 +01:00
Joerg Wunsch
b00c284289 Replace msg_info() by msg_debug() in jtag3_prmsg() and jtag3_prevent()
Both these functions are called at verbosity level DEBUG and above,
so they must not produce INFO level messages.

Supposed to fix issue #1726
2024-03-28 10:18:31 +01:00
Joerg Wunsch
471ce04604 Fix BOL detection for internal logging
Internal log messages are generated without setting "no_nl",
so the log is always at BOL next time.
2024-03-28 09:53:42 +01:00
Joerg Wunsch
dff00a39ba Improve logging and \v and newline handling
Not yet fully where I'd like to have it, but already getting
closer. Internal logging always gets a \n appended unless
self.log() is called with "no_nl" - which is used when being
called from the avrdude_message2() callback.
2024-03-28 09:19:50 +01:00
Joerg Wunsch
1e78b8c2e2 Add option to save log file
Do not emit trace messages to log window - they are too verbose, and
cause the GUI to become very unresponsive.

Still needs improvements.
2024-03-27 14:37:36 +01:00
Joerg Wunsch
457c21aff5 Handle abnormal termination in progress_callback 2024-03-27 12:57:00 +01:00
Joerg Wunsch
8349f8860c Replace PM_* constants enum by #define
This makes it consistent with src/libavrdude.h again.
2024-03-27 11:39:30 +01:00
Joerg Wunsch
65226cdd9e Revert "Turn PM_* #defines into an enum"
This reverts commit 377d3f353c.

It's actually also possible to wrap the #defines in SWIG, so use that
subsequently.
2024-03-27 11:32:31 +01:00
Joerg Wunsch
6d1f413a69 Implement flash reading. 2024-03-27 06:38:07 +01:00
Joerg Wunsch
7b9acec467 Fix progress reporting
Turn time calculations into int.
"Finish" indication is percent == 100.
When reading signature, manually clear progress lest it would
stick at 66 %.
Enforce processing of GUI events in progress_callback()
2024-03-27 06:36:31 +01:00
stefanrueger
07669a9d40
Document progress reporting in source code 2024-03-27 14:07:07 +13:00
Joerg Wunsch
1f227636df Implement progress indication 2024-03-26 22:29:24 +01:00
Joerg Wunsch
cc371f07cf Only start programmer if not already started
This allows to re-select a different device (e.g. after reading the
signature).
2024-03-26 14:49:16 +01:00
Joerg Wunsch
2b4058887e Add field with possible device after reading signature 2024-03-26 14:48:16 +01:00
Joerg Wunsch
09ece3753e First device memory operations: read signature
Start a "Memories" popup for the device. In the "Signature" tab,
show the expected signature from the config file, versus the
signature read from the device.
2024-03-25 22:56:23 +01:00
Joerg Wunsch
c7ab10e9be Enlarge the button boxes for programmer and device selection.
Should we ever want to translate the UI into other languages,
the English wording might become too small.
2024-03-25 21:40:02 +01:00
Joerg Wunsch
ce3b9f0a0c Turn device family selection into a QGroupBox
This is similar to programmer selection, and replaces a rather
hacky design consisting of a vertical layout with a label on top.
2024-03-25 21:37:45 +01:00
Joerg Wunsch
72da4a9ee7 Rename View -> Device
There will be more related items below "Info".
2024-03-25 21:29:34 +01:00
Joerg Wunsch
a3d482dddf Stop programmer when exiting
Some programmers behave erratical when not being told "Goodbye"
correctly.
2024-03-25 21:22:36 +01:00
Joerg Wunsch
c81f6d7031 Add programmer port selection, and starting programmer
Port names are automatically filled in for USB and linuxgpio programmers.

When all of programmer type, port name, and device are selected, try
to connect to the programmer.
2024-03-25 17:56:33 +01:00
Joerg Wunsch
28e05c6840 Implement programmer selection dialog
This tries to categorize the programmers by programming methods, to
allow reducing the size of the combo box to select from.
2024-03-25 16:57:26 +01:00
Joerg Wunsch
5022a36d95 Turn the log viewer into HTML and color-coded message levels
This demonstrates the possible features with implementing an
application-specific avrdude_message2() callback handler.
2024-03-25 14:34:16 +01:00
Joerg Wunsch
b7d6111d1b Change the GUI from using uic -g python to directly loading the .ui files
uic support for Python has not always been present. There used to be a
pyside2-uic in the past, but at least on Ubuntu, it disappeared.  As
the way how to integrate the uic calls into CMake is also not clear,
it appears to be best to just load the .ui files at run-time.

Most noticable side-effect is that the .ui property is no longer needed
to access the UI elements from the various widget objects.
2024-03-25 13:23:42 +01:00
Joerg Wunsch
c2bfc9fc91 Add tooltips to the radio buttons
They are easily accessible from inside the callback, so they can be
directly translated to ad.cvar.verbose.
2024-03-25 13:22:40 +01:00
Joerg Wunsch
d15672df66 Add dialog to change log level
This sets the global AVRDUDE verbosity level, based on a
radio button group.

quell_progress right now not supported
2024-03-25 11:22:48 +01:00
Joerg Wunsch
fbea1a7556 Fine-tune resizing the device info a bit 2024-03-24 22:58:36 +01:00
Joerg Wunsch
9b6fb3cf03 Implement the Device Info popup
This essentially displays the same information as the simple
test script does with its "getavr()" function:

* device names (long and short)
* location of definition in config file
* device memories
* device variants
2024-03-24 21:59:23 +01:00
Joerg Wunsch
77bcf8693b Rename "Device Memories" to "Device Info" 2024-03-24 13:02:54 +01:00
Joerg Wunsch
e6d2d3f40d Implement device selection
Unify logging into a single log() method.
2024-03-24 00:13:43 +01:00
Joerg Wunsch
fef43111e3 First skeleton of a very basic GUI
This adds a few .ui files (created with Qt designer), and a
skeleton to create a basic GUI out of them. Only functionality
so far is the selection of a device.
2024-03-23 23:49:58 +01:00
Joerg Wunsch
9c0623bf1c Start a src/python subdir 2024-03-21 21:46:32 +01:00
Joerg Wunsch
ed8e4edaa9 Add a comment about fileio usage 2024-03-21 13:38:14 +01:00
Joerg Wunsch
571c7429c7 Add various fileio_* functions
Omitted by now: functions that take or yield a FILE*.
2024-03-21 13:26:09 +01:00
Joerg Wunsch
3420772785 Add a m.clear() method
This allows to clear the contents as well as the "ALLOCATED" tag from
a respective memory buffer.

Also fix some docstrings.
2024-03-21 13:06:59 +01:00
Joerg Wunsch
c6c9aaee1c Fix offset check in m.get and m.put helpers 2024-03-21 11:55:24 +01:00
Joerg Wunsch
1ae394f1ed Assign TAG_ALLOCATED in m->put() 2024-03-21 11:00:39 +01:00
Joerg Wunsch
708403bbda Initialize progress reporting for avr_{read,write}_mem
Both these functions deliberately do not initiate progress reporting,
but rather leave it up to their callers to do so.  For the Python
wrapper, there is no explicit caller, so abuse the "check" typemap to
inject the respective code.
2024-03-20 23:05:24 +01:00
Joerg Wunsch
b65e9d8f4d Revert "Initialize progress reporting in avr_{read,write}_mem"
This reverts commit 296883cf1a.
2024-03-20 23:05:03 +01:00
Joerg Wunsch
73c8a7854b Populate many more methods of struct programmer_t
For optional methods, place checks that prevent dereferencing NULL
pointers, resulting in a SWIG exception instead.

For methods that return values in pointers, provide "argout" typemaps.
2024-03-20 13:52:48 +01:00
Joerg Wunsch
a02994dd12 Always populate setup and teardown methods of struct programmer_t
Many programmer implementations require "cookies" to store internal
data. It helps to be able to always call setup and teardown methods.
2024-03-20 13:46:26 +01:00
Joerg Wunsch
0e7a76f837 Fix typo: False -> false
This is C code, not Python. ;-)
2024-03-20 10:07:33 +01:00
Joerg Wunsch
1de634ffa1 Make the reporting functions a bit more robust
Sometimes, non-ASCII characters might appear in message strings,
causing a UTF-8 decoding error. Catch it, so the remainder can
proceed.
2024-03-19 23:13:15 +01:00
Joerg Wunsch
cbfaa9f718 Add an argout typemap for read_sib
This allows to convert the read_sib result into a Python
bytes() object.
2024-03-19 23:08:17 +01:00
Joerg Wunsch
fa78ea3a34 Set the progress and message callbacks by default
Also bump verbosity to 2 as a starting point - this is
development right now.
2024-03-19 23:07:23 +01:00
Joerg Wunsch
5fd5cffdda Use correct index into tuple in message_type() 2024-03-19 23:06:47 +01:00
Joerg Wunsch
984eb922b2 Remove MSVC build for arm64 by now
It attempts to link against the wrong (x86) Python libs.
2024-03-18 22:09:27 +01:00
Joerg Wunsch
858c3f696c Add an update_progress implementation
This allows for Python code providing a callback function that
is used to indicate progress.

Also fix a few minor things in message callback (reference
counting of Python objects).
2024-03-18 20:57:17 +01:00
Joerg Wunsch
296883cf1a Initialize progress reporting in avr_{read,write}_mem
Progress reporting needs to be initialized by passing it a "header"
string, in order to re-adjust internal static variables.
avr_{read,write}_mem did not do this, so they only reported progress
upon the very first invocation.
2024-03-18 20:55:19 +01:00
Joerg Wunsch
68d44ea1e6 Implement Python callback for avrdude_message2()
Doing so requires quite a bit of C preprocessing, since a va_list from
C cannot be passed to a Python function directly.

Also, using stdout or stderr is not necessarily going to be the
correct target for a Python program, so instead, convert the FILE*
arguments to names to pass them to Python.

By now, the '\v' feature of the message system (conditional newline)
is ignored here.
2024-03-18 17:45:55 +01:00
Joerg Wunsch
5782c182c1 Update swigtest.py
Reflect current status: helper to start and stop a programmer in the
correct sequence. Read signature memory space, and compare signature
against config file definition.
2024-03-15 22:52:59 +01:00
Joerg Wunsch
1e3dc29d81 Add more docstrings, clean-up warnings 2024-03-15 21:12:10 +01:00
Joerg Wunsch
a3475a6629 Implement the heart of struct programmer_t
This also implements the main methods that need to be accessible
from outside, as kind-of an OO approach to struct programmer_t.
2024-03-15 17:57:56 +01:00
Joerg Wunsch
c9cee81281 Add a typemap to represent the AVRPART signature as Python bytes. 2024-03-15 17:27:17 +01:00
Joerg Wunsch
920b964af9 Add AVRMEM* buffer handling methods
m->buf is not directly accessible from within Python. Add two methods
that allow to place and retrieve data there, as Python bytes() objects.
2024-03-15 14:35:07 +01:00
Joerg Wunsch
356693dab4 Add device variants to example printout 2024-03-13 13:56:40 +01:00
Joerg Wunsch
1968a11754 Combine the various cast_* functions with ldata()
All these typecast helpers are supposed to operate on LNODEID elements,
in order to convert them to the desired target type. As such, it makes
sense to include the ldata() LNODEID access itself.

Add docstrings for them as well, also for the entire module.
2024-03-13 12:53:30 +01:00
Joerg Wunsch
d34324ceed Add a -v option to build.sh
This allows for a verbose build, where the commands being called
are displayed.
2024-03-12 20:54:21 +01:00
Joerg Wunsch
f9b959343e Replace hand-crafted dicts for AVRMEM and AVRPART by SWIG structs
This requires a bit of Python helpers for pretty-printing, but
otherwise simplifies many things later on.
2024-03-12 18:12:28 +01:00
Joerg Wunsch
fd8704d982 Implement avrdude_message2() from main.c
This is eventually to be replaced by a Python callback.
Right now, use what main.c is using.
2024-03-10 22:55:50 +01:00
Joerg Wunsch
65bf6393da Declare avrdude_message*() in library header file
While these functions are *not* implemented by the library itself,
they are supposed to be provided by whatever application is using the
library. As such, they need to be declared in the public library
header file, including the various constants for msglvl and msgmode.
2024-03-10 22:50:24 +01:00
mcuee
e986f167db
Add PYTHON_LIBRARY to swig_libavrdude linking 2024-03-09 20:55:25 +08:00
Joerg Wunsch
e063bf16db Make path to os.add_dll_directory() absolute 2024-03-09 08:15:38 +01:00
Joerg Wunsch
3f5c32b6d4 Fix include directories for SWIG build 2024-03-08 16:16:35 +01:00
Joerg Wunsch
8c4f3b0632 Tweak Windows DLL search paths 2024-03-08 16:10:46 +01:00
mcuee
cfe608a63f
Update build.yml to use CMAKE_VERBOSE_MAKEFILE to debug Windows build
This is to debug Windows MSVC and MSYS2 build.
Previous change already use the same option to debug macOS build.
2024-03-08 17:23:07 +08:00
Joerg Wunsch
9be5164b5b Add prog_modes to AVRPART* wrapper
Can be then passed to ad.avr_prog_modes_str() to decode nicely.
2024-03-08 08:58:29 +01:00
Joerg Wunsch
e10730ef40 Add some heuristics to find out the Windows build directory
Adding the build directory to the module search path eases development
by now.
2024-03-08 08:39:07 +01:00
Joerg Wunsch
3f944559b6 Add PM_* names, and signature search functions 2024-03-07 22:49:13 +01:00
Joerg Wunsch
334b8c5899 Protect AVRMEM* and AVRPART* typemaps agains NULL pointers
Some library functions might return AVRMEM* and AVRPART* as
NULL pointers. Prevent them from being dereferenced, and
return a Python None object instead.
2024-03-07 22:49:13 +01:00
Joerg Wunsch
377d3f353c Turn PM_* #defines into an enum
This helps the SWIG wrapper to define them as well.
2024-03-07 22:49:13 +01:00
mcuee
9567f96f1b
Update build.yml to revert previous change 2024-03-06 23:15:07 +08:00
mcuee
02d3e16b0e
One more try to debug macOS build for SWIG 2024-03-06 23:11:11 +08:00
mcuee
9f6badaf18
Update build.yml to debug macOS Homebrew CI issue 2024-03-06 21:28:25 +08:00
mcuee
a98d2155e7
Update build.yml to add Python/Swig for MSYS2 build 2024-03-06 20:22:09 +08:00
mcuee
d48c944df2
Update build.yml to use Homebrew python 2024-03-06 20:13:01 +08:00
Joerg Wunsch
d4fe955808 Merge remote-tracking branch 'upstream/main' into swig_libavrdude 2024-03-03 21:59:32 +01:00
Joerg Wunsch
4f455c6043 First tiny little steps towards a SWIG "hello world"
Config file handling and basic list handling is there.
2024-03-03 21:37:08 +01:00
stefanrueger
34366a6b9d
Update test-avrdude help message 2024-02-29 20:26:57 +13:00
stefanrueger
27eb695c21
Update NEWS 2024-02-29 11:46:58 +13:00
Stefan Rueger
076e2e90cd
Merge pull request #1709 from stefanrueger/benchmark
Add benchmark option `-b` for `test-avrdude`
2024-02-29 11:41:38 +13:00
Stefan Rueger
e5304a4d59
Merge pull request #1707 from ndim/fix-cmake-builds-related-to-ac_cfg.h
Fix cmake build errors related to ac_cfg.h
2024-02-29 11:41:17 +13:00
stefanrueger
71a9cb47b3
Keep case of part in test-avrdude -b -p "-p part ..." 2024-02-28 23:27:38 +13:00
stefanrueger
e35714b1ce
Change 1-byte file upload for emulated chip erase 2024-02-28 22:14:28 +13:00
stefanrueger
64c5d1da0b
Remove avrbench and generate 4-number benchmark table with legend 2024-02-28 22:07:18 +13:00
stefanrueger
61ed3dd18f
Mention avrbench legend in test-avrdude -b summary 2024-02-27 23:14:31 +13:00
stefanrueger
82c001bab4
Drop chip erase and checking test for test-avrdude -b 2024-02-27 23:10:01 +13:00
stefanrueger
efd6bab19c
Widen chip erase tests to also capture -c urclock emulation 2024-02-27 22:51:36 +13:00
stefanrueger
cd41d2b4e2
Change /dev/null to temp file to be Windows compatible 2024-02-27 15:00:22 +13:00
stefanrueger
f088a9bc3f
Clarify -b option 2024-02-27 14:46:37 +13:00
stefanrueger
df3c67f2d0
Add normalised avrbench number suitable for markdown tables
The cumulative time for typical user tasks depends on the flash and EEPROM
size of the part. This commit computes a size-normalised time. Lower is
better. This avrbench number still depends on the part, but less so than
the cumulative time of the tasks.

The summary line is put in vertical bars to make creation of markdown
tables easier.
2024-02-27 14:09:52 +13:00
stefanrueger
3b567687a7
Lowercase variable names in test-avrdude
Uppercase names are typically used for environment variables in bash
2024-02-27 13:44:52 +13:00
stefanrueger
6e6404cbb4
Use alternative for /dev/null when not available 2024-02-27 11:54:40 +13:00
stefanrueger
274ac34b6c
Add benchmark option -b to test-avrdude
This executes five tests for typical programming tasks:
  - Write/verify a "difficult" sketch to flash: two code sections and one
    data section separated by "holes" of different sizes
  - Dump all flash, eg, to make a backup
  - Write/verify a "difficult" eeprom data file with holes
  - Dump all eeprom, eg, to make a backup
  - Chip erase (bootloaders are expected to page erase flash apart from
    the bootloader itself) and spot check whether flash was erased

The reported times are realistic times with overhead of starting avrdude,
resetting the board via DTR/RTS, establishing comms, including erasing the
flash before writing/verifying the sketch and disengaging the chip.

$ test-avrdude -b -d 0 \
  -p "u7.7/weu-jPrac -c urclock -P ch340 -p m328p -b 1000000" \
  -p "u7.7/-eu-jPrac -c urclock -P ch340 -p m328p -b 1000000"

Testing avrdude version 7.3-20240225 (20788712)
Prepare "u7.7/weu-jPrac -c urclock -P ch340 -p m328p -b 1000000" and press 'enter' or 'space' to continue. Press any other key to skip
   2.174 s: flash -U write/verify holes_rjmp_loops_32768B.hex
   1.339 s: flash -U read all flash
   1.415 s: eeprom -U write/verify holes_pack_my_box_1024B.hex
   1.034 s: eeprom -U read all
   1.604 s: chip erase and spot check flash is actually erased
   7.566 s: benchmark for u7.7/weu-jPrac -c urclock -P ch340 -p m328p -b 1000000
Prepare "u7.7/-eu-jPrac -c urclock -P ch340 -p m328p -b 1000000" and press 'enter' or 'space' to continue. Press any other key to skip
   2.001 s: flash -U write/verify holes_rjmp_loops_32768B.hex
   1.333 s: flash -U read all flash
   1.405 s: eeprom -U write/verify holes_pack_my_box_1024B.hex
   1.029 s: eeprom -U read all
   1.618 s: chip erase and spot check flash is actually erased
   7.386 s: benchmark for u7.7/-eu-jPrac -c urclock -P ch340 -p m328p -b 1000000

Note the benchmark line with the cumulative time for all five tasks
2024-02-26 23:19:43 +13:00
Hans Ulrich Niedermann
9616b3709c Look for generated ac_cfg.h in builddir first
As it can happen that there is a leftover `src/ac_cfg.h` when
running an out of tree cmake build (you might have run `cmake .`
or `./src/bootstrap`), the out of tree cmake build must look
for `ac_cfg.h` in its builddir first (e.g. `build_linux/src/`).

Otherwise the cmake build picks up and uses whatever data happens
to be in `src/ac_cfg.h`.

Both the MSVC and GCC C processors are documented to look in the
location of the `#include` directive for the included file first
for double quoted includes, so the old `#include "ac_cfg.h"` was
exactly the wrong thing to do. clang probably does the same, and
ISO C specifies the sequence of places to look for include files
as implementation defined.

So this changes all occurrences of `#include "ac_cfg.h"` to
`#include <ac_cfg.h>` which follows the sequence of `-I` or `/I`
directives as cmake builds add via `include_directories` or
`target_include_directories`.

Fixes: https://github.com/avrdudes/avrdude/issues/1706
2024-02-26 00:31:22 +01:00
Hans Ulrich Niedermann
92e2dd44ff Fix cmake not finding generated ac_cfg.h
When there is no `src/ac_cfg.h` (e.g. a fresh `git clone` or after
a working dir cleanup like `git -f -d -x`), running `cmake` will
complain about not being able to find `ac_cfg.h`.

This is probably because cmake looks for source files in the
`CMAKE_CURRENT_SOURCE_DIR`, but when cmake creates `ac_cfg.h`
it does so ´CMAKE_CURRENT_BINARY_DIR`, which is often different.

Anyway, this makes the location of files generated by `configure_file`
explicit as `CMAKE_CURRENT_BINARY_DIR`, and uses that same location
in the source file list for the `libavrdude` target (instead of just
`ac_cfg.h` with the implicit `CMAKE_CURRENT_SOURCE_DIR`) and adds the
same source file to the `avrdude` target to allow cmake to determine
the dependencies properly.
2024-02-26 00:31:15 +01:00
Hans Ulrich Niedermann
dfcd5cc6d8 Directly use AVRDUDE_FULL_VERSION string macro
Directly use the AVRDUDE_FULL_VERSION macro instead of first
defining an initialized variable which is never changed and
then using that variable.

This means one less layer of indirection both for the computer
and for the programmer to go through when trying to understand
the code.
2024-02-26 00:14:20 +01:00
Hans Ulrich Niedermann
5c891b347e gitignore: Files generated by "cmake ." 2024-02-26 00:13:54 +01:00
stefanrueger
2078871273
Update NEWS 2024-02-25 13:58:09 +13:00
Stefan Rueger
a8112b9ae8
Merge pull request #1703 from stefanrueger/avr-ids
Abbreviate ids of modern AVR parts
2024-02-25 13:54:33 +13:00
Stefan Rueger
d23e30736b
Allow slash in part variant name for -p (#1702)
Developer options are added to part names or wildcards by a / suffix
followed by a the option characters. However, some part variant names also
contain a slash, eg, AVR64DB64-E/MR. This commit gives priority to such a
variant name and does not interpret the slash as developer option.
2024-02-25 13:53:34 +13:00
Stefan Rueger
3c346acfdf
Merge pull request #1700 from stefanrueger/report-progress
Fix reporting of too short r/w times for files with holes
2024-02-25 13:52:51 +13:00
Stefan Rueger
a6b5acecf6
Merge pull request #1699 from stefanrueger/remove-port-array
Change port array in PROGRAMMER to be const char *
2024-02-25 13:52:26 +13:00
stefanrueger
8552760727
Add comment re use of libavrdude 2024-02-24 12:41:51 +13:00
stefanrueger
5c61b9e770
Update NEWS 2024-02-24 00:49:12 +13:00
Stefan Rueger
08d14154b7
Merge branch 'main' into remove-port-array 2024-02-24 00:28:30 +13:00
Stefan Rueger
2425ee98a6
Merge pull request #1689 from dbuchwald/serialupdi_doc_update
Updated section about NVM models support
2024-02-24 00:26:24 +13:00
Stefan Rueger
4b7da29cbe
Merge pull request #1688 from ndim/libavrdude.h
libavrdude.h fixes and installation of libavrdude-avrintel.h
2024-02-24 00:26:08 +13:00
Stefan Rueger
27fe913c29
Merge pull request #1681 from ndim/improve-autotool-build
Improve autotool build (part 1/n)
2024-02-24 00:25:32 +13:00
stefanrueger
ab0d92944d
Abbreviate ids of modern AVR parts 2024-02-24 00:12:17 +13:00
stefanrueger
a83f3cf087
Update libavrdude major version 2024-02-23 13:36:27 +13:00
stefanrueger
c8b6a7bcd9
Fix reporting of too short r/w times for files with holes 2024-02-22 22:36:13 +13:00
stefanrueger
a24e6eb74b
Update libavrdude version 2024-02-22 21:13:14 +13:00
stefanrueger
75eccf7d8e
Change port array in PROGRAMMER to be const char * 2024-02-22 15:33:49 +13:00
stefanrueger
5277e384af
Harden against port string being NULL 2024-02-22 15:29:22 +13:00
Hans Ulrich Niedermann
8553d37c37 Move auto-added m4 files to auto-m4/ subdir
Have the autotools place their m4 files into the auto-m4/
subdir to separate them from our own m4 files.

Not using AC_CONFIG_MACRO_DIRS for backwards compatibility.
2024-02-21 09:33:50 +01:00
Hans Ulrich Niedermann
a690c40e5b Add GIT_COMMIT_HASH to autotools AVRDUDE_FULL_VERSION
Add the GIT_COMMIT_HASH to the version message printed by
"avrdude -?" and in the avrdude.conf avrdude_conf_version line.

So the autotools buildsystem now produces the identical
version message as the cmake buildsystem does.
2024-02-20 06:20:47 +01:00
Hans Ulrich Niedermann
dd9e4d2cf2 m4 quote macro args and set variable defaults
This m4 quotes many more macro arguments and deals with the
setting of variables.

  * Set variable default values to avoid accidental use of
    env var values from the caller of the configure script
  * rewrap some longer lines
  * Remove AC_SUBST([FOO], [$FOO]) type no-ops. AC_SUBST([FOO])
    does the same.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
cc94578803 Call it AVRDUDE_FULL_VERSION everywhere
Calling AVRDUDE_FULL_VERSION just VERSION in parts of the build
process, and AVRDUDE_FULL_VERSION in others, is unnecessarily confusing.

So call it AVRDUDE_FULL_VERSION everywhere.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
29695afebb gitignore: dist tarballs and distdir/ itself 2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
dc88ff42ad Add AM_PROG_AR before LT_INIT, removing AC_PROG_AR etc
Use AM_PROG_AR before LT_INIT to prevent occasional warnings.

AM_PROG_AR was introduced in the 1.11 to 1.12 timeframe,
and we require at least Automake 1.14.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
3ef9f7194a Move AM_SILENT_RULES directly after AM_INIT_AUTOMAKE 2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
6f11b88bcd Stop checking for AM_SILENT_RULES macro
There is no need to check for AM_SILENT_RULES.

AM_SILENT_RULES was introduced in automake 1.11, and we
require at least automake-1.14 now.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
8d73b0521d Remove unused TIME_WITH_SYS_TIME macro definition
The TIME_WITH_SYS_TIME C preprocessor macro is not found
anywhere in the source tree, so we do not need to define
it after all and can get rid of the obsoletion warning.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
f8bb5619b8 Use committer date for commit date and year
Quoting CMakeLists.txt: "[...] of latest commit"

"Latest commit" is better served by using the committer date %cd
instead of the author date %ad: The author date could be some time
last year with committer date being today.

Note this affects both autotools and cmake buildsystems to keep
the generated version message dates and year in sync.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
bccad9dfe6 Fix libreadline summary output
AC_CHECK_LIB([readline], [readline]) without an ACTION-IF-FOUND
results in the definition of the HAVE_LIBREADLINE C preprocessor
macro and the addition of -lreadline to LIBS, not a configure
script environment variable have_readline.

So this repeats what the default ACTION-IF-FOUND does (add
-lreadline to LIBS, AC_DEFINE the HAVE_LIBREADLINE macro),
and in addition defines the have_libreadline variable as
yes for later use inside configure.ac.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
d0a36e03b7 Fix accidentally inconsequential typo in variable name 2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
c076aa7f3b Consistently use x and quotes in test(1) calls 2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
5cbbf31852 Expand AC_PROG_AWK because we are using $(AWK) 2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
9b4a667fc2 Use newer AC_PROG_LEX invocation
As our src/config.c defines a "yywrap" function, there
is no need for AC_PROG_LEX to look for for a "yywrap"
function in LEXLIBS.

Therefore we add the "noyywrap" option to follow the more
modern AC_PROG_LEX invocation.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
84b649849c Require a certain baseline of tool versions
Require a certain baseline of tool versions, in this case
from around 2013 (autoconf 2.69 and automake 1.14).

This is a significant advancement over the old requirement
of autoconf 2.60 (from 2006) and no requirement on automake
which gives us features without needing a very recent system.

The exact versions to require might be up to debate.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
b6a47dddec Line wraps to improve human readability
Wrap some lines in src/configure.ac to improve readability.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
9b576c4c01 Raw result of running "autoupdate"
This is just the raw result of running "autoupdate" to update
the src/configure.ac file to a more recent standard.

Manual fixes to the autoupdate output will happen over the next
few commits.

This fixes some of the autoreconf time warnings, e.g. about AC_TRY_*
being used instead of AC_*_IFELSE.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
ed2bb82652 Pass bootstrap CLI arguments to autoreconf
For my convenience, pass all bootstrap CLI arguments on to autoreconf.

This is useful when testing with e.g. -Wall and -Werror arguments.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
b4402bd334 Have bootstrap script work only in its own directory
When called from a working directory different from the directory
where the bootstrap script is located, make the bootstrap script
only work on its own directory and not whatever the current working
directory just happens to be.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
2a6f415166 Have autoreconf deal with initializing GNU build system
Let the autoreconf tool handle the sequencing of tool calls.

The autoreconf tool has been dealing with calling tools like
aclocal, libtoolize, etc. quite well for about the last 20 years.

This keeps the "bootstrap" script around to keep the old way
of calling bootstrap working, i.e. maintain compatibility with the
existing workflows.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
c96032a57b Move all autotools helper scripts to auto-aux/
Move all autotools helper scripts and auxiliary files installed
automatically by the autotools to auto-aux/ (e.g. config.guess,
depcomp, install-sh, texinfo.tex, etc.).

Moving AC_CANONICAL_TARGET after AC_CONFIG_AUX_DIR works
around a silent bug in Autoconf 2.69 where the generated
configure script would not find the install-sh file which
has been placed in that given aux directory.

Moved AM_INIT_AUTOMAKE which must also happen after
AC_CONFIG_AUX_DIR.
2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
1b5f3935b6 Add example build script for autotools build tests 2024-02-19 06:10:33 +01:00
Hans Ulrich Niedermann
610330f0d9 Remove unused unnecessary commented build code
Remove unused unnecessary commented out build code from
"src/configure.ac".

I accidentally left those comments in commit d15c561a.
2024-02-18 16:21:25 +01:00
Hans Ulrich Niedermann
8fb73a1458 Add basic CI checks using the autotools build
This add some basic CI checks which exercise the autotools build:

  * make targets "all" "install" testing compilation and installation
  * run the same dry-run test-avrdude check as the cmake builds
  * make target "distcheck" testing that dist tarball contains all
    the necessary files
2024-02-18 16:21:19 +01:00
Dawid Buchwald
565a7238f4 Updated section about NVM models support 2024-02-16 09:38:52 +01:00
Hans Ulrich Niedermann
ec698b4e1a Include headers defining the used types
As libavrdude-avrintel.h uses not only uint32_t and related
types from stdint.h, but also size_t from stddef.h, we also
need to #include the latter into libavrdude.h before
libavrdude.h includes libavrdude-avrintel.h
2024-02-15 00:51:05 +01:00
Hans Ulrich Niedermann
df7c495fb7 Use proper C99 parameterless function declaration 2024-02-15 00:42:52 +01:00
Hans Ulrich Niedermann
efafa0ced0 Install libavrdude internal header libavrdude-avrintel.h 2024-02-15 00:42:52 +01:00
Hans Ulrich Niedermann
bfd9606d23 More stringent #include API checks 2024-02-15 00:42:47 +01:00
stefanrueger
5c1649dcee
Update NEWS 2024-02-15 11:41:52 +13:00
Stefan Rueger
14d1560e52
Merge pull request #1680 from ndim/fix-Wcalloc-transposed-args
Fix -Wcalloc-transposed-args warning
2024-02-15 11:40:20 +13:00
Stefan Rueger
64f2a3ed22
Merge pull request #1686 from stefanrueger/avrintel.h
Make avrintel.h an internal header file for libavrdude
2024-02-15 11:39:27 +13:00
stefanrueger
a82679229a
Update NEWS 2024-02-14 21:54:30 +13:00
Stefan Rueger
cdfc88dfc4
Merge pull request #1687 from mcuee/remove_msys2_32bit_build
Remove 32bit MSYS2 mingw32 and clang32 build
2024-02-14 21:53:28 +13:00
mcuee
2357f833e1
Remove 32bit MSYS2 mingw32 and clang32 build
MSYS2 has dropped 32bit binary packages for libusb, libusb-compat-git and libftdi.
2024-02-14 13:36:21 +08:00
stefanrueger
e2a10db193
Make avrintel.h an internal header file for libavrdude 2024-02-14 17:15:21 +13:00
Hans Ulrich Niedermann
e0188195a3 Fix -Wcalloc-transposed-args warning
The calloc(3) function has two arguments: the number of members,
and the size of one member.

sizeof(...) makes more sense as member size, and 1 as number
of members. At least that is what the gcc warning wants.

This was the only compiler warning I could get on my Fedora 40
test build (gcc 14) with CFLAGS="-Wall -Wextra -Werror".
2024-02-07 15:26:18 +01:00
stefanrueger
0179026e09
Add NEWS template for next version 2024-02-08 00:19:33 +13:00
stefanrueger
e599214c9d
Update version info for 7.3 2024-02-07 23:54:45 +13:00
stefanrueger
fff25530e1
Update NEWS 2024-02-07 23:46:33 +13:00
Stefan Rueger
72500a1018
Merge pull request #1668 from ndim/test-string-equality-operator-typo-fix
The test(1) string comparison uses =, not ==
2024-02-07 23:42:07 +13:00
Hans
b23830c448
Add more programmer descriptions (#1667) 2024-02-07 23:40:43 +13:00
Stefan Rueger
4f1e3871b0
Merge pull request #1663 from ndim/autoconf-package-version
Automatically determine Autoconf package version from cmake package version
2024-02-07 23:34:11 +13:00
Hans Ulrich Niedermann
a97e71a321 The test(1) string comparison uses =, not ==
The test(1) command string comparison operator is a single
equals sign, not a double equals sign.

Pointed out by @mcuee at https://github.com/avrdudes/avrdude/pull/1663?#issuecomment-1931024192
2024-02-07 01:44:01 +01:00
Hans Ulrich Niedermann
d15c561a7a Get AC_INIT version number from CMakeLists.txt
Generate the version number used in the Autotools builds
via a script from the top-level CMakeLists.txt and git
information instead of manual editing.

This script mimics what the avrdude top-level CMakeLists.txt
does for composing AVRDUDE_FULL_VERSION.

Consequently, maintainers do not need to edit the version numbers
in the "src/configure.ac" file's "AC_INIT(...)" line any more.

However, unlike the cmake based builds, this does not print the
commit hash in the "avrdude --help" message or in the "avrdude.conf"
file's "avrdude_conf_version = " line. That will come later.

These are the six build types supported and what avrdude
versions cmake and the autoconf builds actually produce:

                               cmake          autoconf
    git clone     release      7.2            7.2
    git clone     non-release  7.2-DATE+HASH  7.2-DATE
    git archive   release      7.2            7.2
    git archive   non-release  7.2            7.2
    dist tarball  release      N/A            7.2
    dist tarball  non-release  N/A            7.2-DATE
2024-02-07 00:47:35 +01:00
Hans Ulrich Niedermann
e58b344414 Use Github issues page for AC_INIT bug reports 2024-02-07 00:47:34 +01:00
Hans Ulrich Niedermann
acb7ba4d88 Multi line AC_INIT for improved overview 2024-02-07 00:47:34 +01:00
Hans Ulrich Niedermann
962cb030b2 gitignore tarballs generated by "make dist" 2024-02-07 00:47:34 +01:00
Hans Ulrich Niedermann
ce1bc3e34f Allow repeated doc builds without errors (Autotools)
Sometimes when building with the Autoconf buildsystem,
the avrdude-html/ subdir already exists and therefore
renaming the newly built avrdude/ subdir to avrdude-html/
cannot succeed.

Removing the old avrdude-html/ subdir first fixes that.
2024-02-07 00:47:34 +01:00
stefanrueger
1a64d3831b
Update NEWS 2024-02-06 22:17:02 +13:00
Stefan Rueger
d68034c5c6
Merge pull request #1662 from stefanrueger/jtagmkii-updi
Read the signature on -c jtag2updi exit if last op was write/erase
PR is based on a draft sketch by @askn37
2024-02-06 22:14:25 +13:00
stefanrueger
83571e3310
Remove -l $logfile when echoing a failed avrdude command 2024-02-06 12:32:22 +13:00
stefanrueger
8fb650d148
Update NEWS 2024-02-06 10:36:03 +13:00
Stefan Rueger
c464ef1441
Merge pull request #1659 from dbuchwald/issue_1655
Enable writing of 512-byte pages for USERROW
2024-02-06 10:31:53 +13:00
Stefan Rueger
38781c8afd
Merge pull request #1658 from stefanrueger/update-test-script
Update test script
2024-02-06 10:30:46 +13:00
stefanrueger
60f04f05fb
Read the signature on -c jtag2updi exit if last op was write/erase 2024-02-06 10:24:10 +13:00
stefanrueger
cf2b362532
Remove -l $logfile when listing avrdude commands 2024-02-05 15:13:43 +13:00
stefanrueger
7bf69aad43
Check $avrdude_bin is executable 2024-02-05 14:51:18 +13:00
stefanrueger
f9246b81c4
Remove wildcard string matches in test script 2024-02-05 14:33:02 +13:00
stefanrueger
8f8316f08b
Change integer test to string test to allow non-integer $elapsed 2024-02-05 14:11:41 +13:00
stefanrueger
e6c1229b71
Remove config eesave output from test-avrdude -v runs
-v is meant to only show AVRDUDE errors and warnings

Before this commit:

$ tools/test-avrdude -v -p "-c dryrun -p m328p"
Testing avrdude version 7.2-20240201 (571a8063)
Prepare "-c dryrun -p m328p" and press 'enter' or 'space' to continue. Press any other key to skip
   0.064 s: fuse access: clear, set and read eesave fuse bit
config eesave=ee_erased # 1
   0.068 s: fuse access: set eesave fusebit to delete EEPROM on chip erase
   0.068 s: chip erase
   0.068 s: flash -U write/verify holes_rjmp_loops_32768B.hex
   0.068 s: flash -T write/verify holes_rjmp_loops_32768B.hex
   0.068 s: eeprom check whether programmer can flip 0s to 1s
   0.069 s: eeprom -U write/verify holes_pack_my_box_1024B.hex
   0.067 s: eeprom -T write/verify holes_{the_five_boxing_wizards,pack_my_box}_1024B.hex
   0.068 s: chip erase and spot check flash is actually erased
   0.068 s: spot check eeprom is erased, too

After:

$ tools/test-avrdude -v -p "-c dryrun -p m328p"
Testing avrdude version 7.2-20240201 (571a8063)
Prepare "-c dryrun -p m328p" and press 'enter' or 'space' to continue. Press any other key to skip
   0.065 s: fuse access: clear, set and read eesave fuse bit
   0.068 s: fuse access: set eesave fusebit to delete EEPROM on chip erase
   0.067 s: chip erase
   0.068 s: flash -U write/verify holes_rjmp_loops_32768B.hex
   0.068 s: flash -T write/verify holes_rjmp_loops_32768B.hex
   0.066 s: eeprom check whether programmer can flip 0s to 1s
   0.069 s: eeprom -U write/verify holes_pack_my_box_1024B.hex
   0.068 s: eeprom -T write/verify holes_{the_five_boxing_wizards,pack_my_box}_1024B.hex
   0.067 s: chip erase and spot check flash is actually erased
2024-02-05 14:04:38 +13:00
Dawid Buchwald
00b8c83233 Preliminary fix for #1655 2024-02-03 12:33:24 +01:00
stefanrueger
571a8063b9
Update test-avrdude usage 2024-02-01 18:29:00 +13:00
stefanrueger
e3d4132997
Update NEWS 2024-02-01 17:30:33 +13:00
Stefan Rueger
0c8ac315cc
Merge pull request #1651 from stefanrueger/tmpfiles
Create test-avrdude's temporary files in the script itself
2024-02-01 17:19:17 +13:00
stefanrueger
acd5584c62
Provide -T option for test-avrdude to add dryrun/dryboot tests 2024-02-01 15:21:34 +13:00
stefanrueger
2c677693f8
Exit test-avrdude with 1 if any failure occurred 2024-02-01 15:09:00 +13:00
stefanrueger
213fe7561f
Create test-avrdude's temporary files in the script itself 2024-02-01 15:02:48 +13:00
stefanrueger
5684b85f86
Update NEWS 2024-01-31 15:08:40 +13:00
Stefan Rueger
03d9fb854c
Merge pull request #1650 from stefanrueger/sed+tmp
Update test-avrdude script
2024-01-31 15:05:19 +13:00
Stefan Rueger
070a3f0b41
Merge pull request #1647 from MCUdude/pgm-delay
Add a fixed delay for AVR Dragon and Arduino Nano Every on port close
2024-01-31 15:04:35 +13:00
stefanrueger
370a15d032
Reduce default delay between avrdude test runs
- From 4 s to 0.75 s
 - Do not delay at all for -c dryrun/dryboot
 - Do not delay before first avrdude call in a series
2024-01-31 14:49:46 +13:00
stefanrueger
86af6b6d01
Add option test-avrdude -t <dir> for tmp directory 2024-01-31 11:44:16 +13:00
stefanrueger
8f46c531f1
Avoid sed -i in test-avrdude script 2024-01-31 11:38:53 +13:00
stefanrueger
3d3a387d1a
Check test-avrdude can write to /dev/shm 2024-01-30 23:15:06 +13:00
stefanrueger
742cb9dd77
Update test-avrdude script
- Simplify command to make eesave fusebit delete EEPROM on chip erase
 - Replace ${var,,} construct with tr A-Z a-z so older bash shells work
 - Make -l work for fuse access tests
2024-01-30 14:31:25 +13:00
MCUdude
f3ca6958ac Use usleep for compatibility reasons 2024-01-29 15:45:01 +01:00
MCUdude
129aba5c86 Add a fixed delay for AVR Dragon and Arduino Nano Every on port close 2024-01-29 15:35:07 +01:00
stefanrueger
68dd7db87c
Update NEWS 2024-01-29 21:20:14 +13:00
Stefan Rueger
b220db2573
Merge pull request #1646 from mcuee/github_test_dryrun
Add tools/test-avrdude to Linux x86_64 github action
2024-01-29 20:55:39 +13:00
stefanrueger
ceb78a125f
Update NEWS 2024-01-29 19:04:55 +13:00
stefanrueger
9b1f4e1920
Enable -U upload of file with holes for urclock 2024-01-29 18:55:22 +13:00
stefanrueger
5e2409b9fc
Remove EEPROM spot check after chip erase from bootloaders
Bootloaders emulate chip erase (if at all) so EEPROM is unlikely erased
2024-01-29 18:31:32 +13:00
mcuee
a6b343d13b
Add tools/test-avrdude to Linux x86_64 github action 2024-01-29 13:12:13 +08:00
stefanrueger
9407dc049d
Update NEWS 2024-01-29 12:26:49 +13:00
Stefan Rueger
b0ba6b60f2
Merge pull request #1645 from stefanrueger/test-avrdude
Add tools/test-avrdude
2024-01-29 12:16:11 +13:00
Stefan Rueger
1f985354f5
Merge pull request #1642 from stefanrueger/factory-reset
Provide terminal command `factory reset`
2024-01-29 12:15:59 +13:00
Stefan Rueger
d9511238ff
Merge pull request #1641 from stefanrueger/dryboot
Add dryboot programmer
2024-01-29 12:15:29 +13:00
Stefan Rueger
d0e444cea1
Merge pull request #1640 from MCUdude/ch343
Add CH343 USB to serial adapter
2024-01-29 12:15:02 +13:00
Stefan Rueger
ebbcdba3f7
Merge pull request #1634 from stefanrueger/one-byte-flash-files
Fix upload of one-byte files to flash
2024-01-29 12:14:43 +13:00
Stefan Rueger
d4ca977596
Merge pull request #1627 from dbuchwald/issue_1609
Multiple updates to SerialUPDI protocol based on discussion 1609 and issues 1621, 1622 and 1623.
2024-01-29 12:14:25 +13:00
stefanrueger
73adee82e2
Update test-avrdude error message 2024-01-29 10:26:11 +13:00
stefanrueger
be9c2a507d
Add tools/test-avrdude
$ tools/test-avrdude -h
Syntax: test-avrdude {<opts>}
Function: test AVRDUDE for certain programmer and part combinations
Options:
    -c <configuration spec>     additional configuration options used for all runs
    -d <sec>                    delay between test commands (default 4 seconds)
    -e <avrdude path>           set path of AVRDUDE executable (default avrdude)
    -l                          list test commands but do not execute them
    -p <programmer/part specs>  can be used multiple times, overrides default tests
    -s                          skip EEPROM tests for bootloaders
    -v                          verbose: show AVRDUDE error and warning messages
    -? or -h                    show this help text
Example:
    $ test-avrdude -d 0 -p "-c dryrun -p t13" -p "-c dryrun -p m4809"

$ echo | tools/test-avrdude -p"-cdryrun -pm328p" -d0
Testing avrdude version 7.2-20240128 (09345002)
Prepare "-cdryrun -pm328p" and press 'enter' or 'space' to continue. Press any other key to skip
   0.064 s: fuse access: clear, set and read eesave fuse bit
   0.083 s: fuse access: set eesave fusebit to delete EEPROM on chip erase
   0.066 s: chip erase
   0.068 s: flash -U write/verify holes_rjmp_loops_32768B.hex
   0.067 s: flash -T write/verify holes_rjmp_loops_32768B.hex
   0.067 s: eeprom check whether programmer can flip 0s to 1s
   0.067 s: eeprom -U write/verify holes_pack_my_box_1024B.hex
   0.066 s: eeprom -T write/verify holes_{the_five_boxing_wizards,pack_my_box}_1024B.hex
   0.069 s: chip erase and spot check flash is actually erased
   0.067 s: spot check eeprom is erased, too
2024-01-29 01:39:08 +13:00
stefanrueger
775dea2ce6
Shrink emulated bootloader for parts with small flash 2024-01-29 01:18:07 +13:00
stefanrueger
09345002b3
Emulate io/sram access depending on classic/xmega/modern part 2024-01-28 15:39:37 +13:00
stefanrueger
889b585db3
Only erase flash, eprom and user-type memories 2024-01-28 00:51:08 +13:00
stefanrueger
4708f6e14e
Emulate 512-byte protected bootloader for dryboot 2024-01-28 00:32:07 +13:00
stefanrueger
aa9369cd73
Fix warning grammar 2024-01-27 18:03:28 +13:00
stefanrueger
a460fcad55
Clarify documentation 2024-01-27 17:46:50 +13:00
stefanrueger
91d7c9f702
Document factory reset command 2024-01-27 13:13:10 +13:00
stefanrueger
bfd14562f9
Provide factory reset command 2024-01-27 13:12:49 +13:00
stefanrueger
084f25f188
Make terminal command args constant strings 2024-01-27 12:10:46 +13:00
stefanrueger
652ef2efc7
Document factory_fcpu part property 2024-01-27 12:09:57 +13:00
stefanrueger
6b71a8d253
Populate factory_fcpu values in avrdude.conf.in 2024-01-27 12:01:30 +13:00
stefanrueger
aa668fa6a3
Provide factory_fcpu variable 2024-01-27 11:54:01 +13:00
MCUdude
a757d8639c Add CH343 documentation URL 2024-01-26 13:40:39 +01:00
stefanrueger
625fcc4e33
Add dryboot programmer 2024-01-26 21:22:47 +13:00
MCUdude
8cf806f4c0 Add CH343 USB to serial adapter 2024-01-26 07:55:12 +01:00
stefanrueger
a59493f333
Fix upload of one-byte files to flash 2024-01-23 22:12:48 +13:00
Hans Ulrich Niedermann
a98f3f0369 man: doc location is <prefix>/share/doc, not <prefix>/doc
Both automake and cmake builds install the documentation somewhere
in <prefix>/share/doc.

This fixes the former mention of <prefix>/doc in the avrdude.1 man page
FILES section.
2024-01-22 14:37:53 +01:00
Stefan Rueger
2f89aece1e
Merge pull request #1631 from MCUdude/table-docs
Update `part` table in avrdude.texi
2024-01-22 13:56:55 +13:00
Stefan Rueger
ef7e8b3ed3
Merge pull request #1629 from MCUdude/pr1568-fix
Make linuxgpio.c compile #1568
2024-01-22 13:56:39 +13:00
Stefan Rueger
a922799414
Merge pull request #1625 from ndim/detect-dynamic-libreadline-in-USE_STATIC_LIBS-case
Detect dynamic readline and serialport libraries for avrdude USE_STATIC_LIBS builds
2024-01-22 13:56:04 +13:00
Stefan Rueger
e1def05780
Merge pull request #1618 from matthijskooijman/jtag3-raise-max-bitclock
Remove 1 Mhz limit on jtag3/atmelice/etc ISP bitclock
2024-01-22 13:55:36 +13:00
Stefan Rueger
3440bd65b7
Merge pull request #1615 from ndim/update-gpl-2.0-text
Update the GPL version 2 text
2024-01-22 13:54:50 +13:00
MCUdude
9de163d1f4 Update part table 2024-01-21 21:35:40 +01:00
MCUdude
baf98f0a47 Fix typo from PR #1568 2024-01-21 14:11:34 +01:00
Dawid Buchwald
1b0b263ae9 Implementation of NVM v4 protocol for #1621 2024-01-20 12:10:23 +01:00
Dawid Buchwald
45b5365830 Added candidate fix for #1622 2024-01-19 15:10:42 +01:00
Dawid Buchwald
d25cacd6fb Fix candidate for unconfirmed issue #1623 2024-01-19 09:13:36 +01:00
Hans Ulrich Niedermann
0b9d1bc1ff Detect dynamic readline and serialport for USE_STATIC_LIBS
Detect the dynamic libraries for libreadline and libserialport
even when building avrdude with USE_STATIC_LIBS.

Fixes: https://github.com/avrdudes/avrdude/issues/1624
2024-01-18 14:47:17 +01:00
Matthijs Kooijman
7580173593 Remove artificial limit on jtag3 bitclock
Previously, the code would limit the clock to 1Mhz. If a higher clock
was specified, it would be set to 1.024Mhz (0x400 khz).

This commit removes this artificial limit, while still preventing
overflowing the two bytes available in the command (effectively limiting
to 65535 kHz).

The original limit seems inappropriate, because the JTAGEICE3 and ATMEL
ICE actually support higher clocks than the old limit. For SPI, the
JTAGICE3 documents supporting up to 1.875Mhz and the ATMEL ICE up to
5Mhz. In practice the JTAGEICE3 (with the newer EDBG version where it
becomes pretty much identical to the ATMEL ICE) also works up to 5Mhz.

When trying to set higher values, the behaviour seems to depend on the
current value. The programmer seems to either keep the previous value
(e.g. from 3Mhz to 10Mhz), or use 8kHz / 125μs (e.g. from 5Mhz to
10Mhz). In any case, the value read back afterwards (and printed with
-v) reflects the actual value.

Also note that the code also applies a lower limit of 1kHz (to ensure
the raw value sent to the device, in kHz, is never zero), but in
practice sending a value of lower than 8kHz ends up setting 8kHz
(125μs). This is also the minimum value in the device documentation.

This commit was tested with:

         Programmer Type       : JTAG3_ISP
         Description           : Atmel AVR JTAGICE3 in ISP mode
         ICE HW version        : 2
         ICE FW version        : 3.55 (rel. 130)
2024-01-16 17:07:01 +01:00
Dawid Buchwald
d38fa2a157 Added reset request to NVMprog operation 2024-01-15 16:31:06 +01:00
Stephan I. Böttcher
0e6c78c1cb Merge branch 'main' into slowudev 2024-01-14 22:11:01 +01:00
Dawid Buchwald
db5d6f4c89 Added support for NVM v5, based on NVM v3 2024-01-14 19:52:48 +01:00
Hans Ulrich Niedermann
ececf3258e Update the GPL version 2 text
Update the GPL version 2 text to the current text as published at

    https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt

The changes are
  * the updated mailing address of the FSF
  * reference to LGPL with name change ("Library" -> "Lesser")
  * whitespace formatting
  * "write to" new FSF address to get a copy of the license
    instead of "seeing http://www.gnu.org/licenses/"
2024-01-11 23:26:42 +01:00
Dawid Buchwald
c0199fa714
Merge branch 'avrdudes:main' into issue_1609 2024-01-11 21:09:14 +01:00
Dawid Buchwald
c33ec9c51b Updated NVM controller code to latest pymcuprog 2024-01-11 20:56:13 +01:00
mcuee
a336e47a6e
Update README.md for Linux avrdude package installation
The original `apt-get` command is only for Debian/Ubuntu or similar distros.
2024-01-10 11:13:19 +08:00
mcuee
5b7f66da04
Update README.md
Change Mac OS to macOS.
Adding Homebrew for macOS.
2024-01-10 11:09:17 +08:00
Dawid Buchwald
2358893974 Split current NVM code into three separate modules 2024-01-09 18:24:28 +01:00
stefanrueger
5b3c3139d0
Remove test code 2024-01-08 22:39:44 +13:00
stefanrueger
0dd7804d7d
Update NEWS 2024-01-08 22:27:01 +13:00
Stefan Rueger
a8837f4bb0
Merge pull request #1612 from mcuee/github_action_clang
Update build.yml to add MSYS2 ucrt64, clang32 and clang64 build
2024-01-08 22:25:40 +13:00
Stefan Rueger
2d872af5e0
Merge pull request #1608 from stefanrueger/z-scanf-modifier
Harden AVRDUDE against pre-C99 libraries
2024-01-08 22:25:12 +13:00
mcuee
8f4fd46874
Update build.yml to add MSYS2 ucrt64, clang32 and clang64 build 2024-01-08 10:22:34 +08:00
stefanrueger
9053883313
Suppress cast warning 2024-01-08 11:01:01 +13:00
stefanrueger
c4dcc34e58
Replace %z... modifiers in printf/scanf 2024-01-07 23:09:55 +13:00
stefanrueger
5bd5d54046
Warn if C library fails %zi scanf format 2024-01-07 23:08:53 +13:00
stefanrueger
03d786e8b0
Update NEWS 2024-01-04 02:09:15 +13:00
Hans
60df52326f
Look for matching prog_modes in locate_part_by_signature() (#1605) 2024-01-04 02:06:33 +13:00
Stefan Rueger
593ea4f83b
Merge pull request #1604 from askn37/pr1602-nano-every-eeprom
Arduino Nano Every EEPROM writing
2024-01-04 02:05:12 +13:00
朝日薫 / K.Sato
ed017002af
jtagmkII_updi_term_keep_alive (#1603) 2024-01-04 02:04:41 +13:00
Stefan Rueger
d11e2f6232
Merge pull request #1602 from stefanrueger/eeprom-optiboot-updi
Force STK500 EEPROM paged r/w for bootloaders
2024-01-04 02:03:41 +13:00
Stefan Rueger
0b1ac3a4f5
Merge pull request #1601 from stefanrueger/avr64du28-32
Support AVR64DU28 and AVR64DU32
2024-01-04 02:03:18 +13:00
Hans
a245cd5370
Use -xmode to switch PICkit4 and SNAP application modes (#1596)
* Use libusb to switch a PICkit4 or SNAP to AVR mode

* Fix case

* implement -xmode=pic
Thanks Wireshark

* Print PIC switch info messages

* Fix typo

* Rename SNAP and PICkit4 USB PID

* Make it possible to enter avr mode even when the tool is in bootloader/recovery mode

* Add -xmode to docs

* Tweak grammar

* Add -xmode support for pickit4_isp and snap_isp
still need to figure out how to actually trigger the mode switch form stk500v2.c

* Don't print "unable to open port" error on pgm->open softfail

* Add const

* Simplify SNAP/PICkit4 mode switching code

* Formatting

* Add extra argument to jtag3_open_common
This makes it possible to switch SNAP/PK4 modes from stk500v2.c as well, using pickit4_isp and snap_isp

* Improve extended parameter parsing

* Improve error message

* Improve extended parameter parsing

* Immediately exit after a mode switch

* Remove unnecessary line

* Add missing serial_close

* Remove unnecessary else

* Minor code tweaks

* Update docs

* Formatting

* Improve external parameter parsing and error handling

* Remove unused parameter
2024-01-04 02:02:24 +13:00
askn37
f0a82fdcc6 Nano Every EEPROM writing 2023-12-27 21:47:47 +09:00
stefanrueger
d08a14ced3
Correct bootrow size 2023-12-25 01:12:09 +13:00
stefanrueger
fe6671dca0
Force STK500 EEPROM paged r/w for bootloaders 2023-12-24 11:29:20 +13:00
stefanrueger
d36b5cac6c
Provide AVR64DU28 and AVR64DU32 entry in config file 2023-12-22 00:27:49 +13:00
stefanrueger
0abea6fc5b
Update avrintel.[ch] files from new .atdf files 2023-12-22 00:27:15 +13:00
stefanrueger
5fffedddf9
Print error message and location of unknown tokens in config files 2023-12-22 00:25:43 +13:00
stefanrueger
06156d9c33
Suppress overzealous compiler warning 2023-12-21 10:53:57 +13:00
stefanrueger
67792ca8c6
Update NEWS 2023-12-18 14:13:36 +13:00
Hans
62b15d205e
Suggest programmers using weighted Damerau-Levenshtein #1593
* Add Damerau-Levenshtein algorithm
* Provide weighted Damerau-Levenshtein distance
* Suggest programmers using weighted Damerau-Levenshtein distance
* Only suggest compatible programmers
* Accept unique initial string for programmer name
* Only suggest part-compatible programmers for initial partial matches
---------
Co-authored-by: stefanrueger <stefan.rueger@urclocks.com>
2023-12-18 14:03:21 +13:00
Stefan Rueger
f5ad833310
Merge pull request #1592 from Ho-Ro/concept_index
Update avrdude.texi: more index entries; header uppercase; correct @xref
2023-12-18 13:59:53 +13:00
Stefan Rueger
e558c286e3
Merge branch 'main' into concept_index 2023-12-18 13:59:31 +13:00
Stefan Rueger
ec96244bfb
Merge pull request #1590 from Ho-Ro/default_baudrate
Provide user config value "default_baudrate" (acc. discussion #1589)
2023-12-18 13:54:56 +13:00
Stefan Rueger
79f70356c1
Merge pull request #1588 from MikeRaffa/main
Issue #973: Differentiate multiple USB programmers of the same VID/PI…
2023-12-18 13:54:26 +13:00
Stefan Rueger
2bd6b5614a
Merge pull request #1587 from MCUdude/get_sck_vtarg
Terminal sck command improvements
2023-12-18 13:53:24 +13:00
Stefan Rueger
ebd4597277
Merge pull request #1586 from Ho-Ro/build_fast
Faster build.sh script with option -j
2023-12-18 13:47:47 +13:00
Martin
2662a2dcd1 Distinguish between "Setting" and "Overriding" for baudrate; doc update
Signed-off-by: Martin <Ho-Ro@users.noreply.github.com>
2023-12-14 15:17:37 +01:00
Martin
a16c5d034f Some programmer do not need a baudrate
Signed-off-by: Martin <Ho-Ro@users.noreply.github.com>
2023-12-14 12:45:22 +01:00
Martin
8711ad579d baudrate > pgm->baudrate > default_baudrate
Signed-off-by: Martin <Ho-Ro@users.noreply.github.com>
2023-12-12 16:16:08 +01:00
Martin
046ba3702a Update avrdude.texi: more index entries; header uppercase; correct @xref
Signed-off-by: Martin <Ho-Ro@users.noreply.github.com>
2023-12-10 20:31:46 +01:00
MCUdude
092a94b370 Remove unnecessary else if 2023-12-09 22:40:36 +01:00
MCUdude
22532f458e Remove explicit cast 2023-12-09 22:37:33 +01:00
MCUdude
67db3f0190 Prevent possible divide by zero 2023-12-09 22:35:35 +01:00
MCUdude
ce6ddeca48 Improve bitclock calcumation routines 2023-12-09 22:33:05 +01:00
MCUdude
7a02d11db5 Add support for more suffixes to -B as well 2023-12-08 22:52:34 +01:00
MCUdude
af14559a81 Fix microsecond bug 2023-12-08 22:43:15 +01:00
MCUdude
aeae4bb0b3 Support more clock speed suffixes 2023-12-08 22:32:58 +01:00
MCUdude
684615b4c5 Add get_sck_period to dragon_jtag and jtagmkii 2023-12-08 21:52:54 +01:00
MCUdude
037dfbd595 add get_sck_period for AVR dragon and jtagmkii 2023-12-08 21:03:10 +01:00
MCUdude
fb77c56113 Add get_* functions to stk600pp and stk600hvsp 2023-12-08 20:14:34 +01:00
MikeRaffa
5dbbb4e6c5 Remove check for 'verbose' on call to pmsg_notice().
Remove some unnecessary braces and parens.
2023-12-06 20:03:31 -05:00
Martin
4834ec1997 baudrate is just an integer number, no numerical expression
Signed-off-by: Martin <Ho-Ro@users.noreply.github.com>
2023-12-05 16:36:01 +01:00
Martin
4f07733277 provide user config value "default_baudrate" (#1589)
Signed-off-by: Martin <Ho-Ro@users.noreply.github.com>
2023-12-05 10:33:15 +01:00
MikeRaffa
e351dc30b2 Documentation for Issue #973 changes. 2023-12-04 17:29:38 -05:00
MikeRaffa
fa2e69de57 Updates based on feedback from stefanrueger.
Change sense of check_for_port_argument_match() to return nonzero when there is a match.

Increase size of 'bus_num' and 'dev_addr' from 4 to 21.

Various cleanup, formatting changes, and simplifications.

Match trailing end of serial numbers.
2023-12-04 17:20:03 -05:00
MCUdude
bb4078e554 add pgm->get_varef support to stk600 2023-12-04 23:00:24 +01:00
MCUdude
f90a7cf909 Fix broken stk600 oscillator value in stk500v2_fosc_value
and add pgm->get_fosc to stk600
2023-12-04 22:12:22 +01:00
MCUdude
cf615f2209 add pgm->get_sck_speed support for STK600 2023-12-04 21:54:51 +01:00
MCUdude
88ec512b68 add pgm->get_vtarget support for STK600 2023-12-04 21:51:16 +01:00
MCUdude
c067a5a778 Add JTAG3 ISP clock and vtarg read 2023-12-04 21:32:49 +01:00
MCUdude
341e1354e9 Remove function name in error messages 2023-12-04 21:26:13 +01:00
MikeRaffa
447b176d11 Issue #973: Differentiate multiple USB programmers of the same VID/PID (libusb or hidapi or libftdi)
Added code for USBasp to check for bus:device match using the -P option. Syntax is -P usb:<bus>:<device> (same as current USBTiny implementation).

This also supports serial number check with the alternative -P usb:<serial_number> format (no ':').

In verbose mode, prints out bus/device/serial number for any found USBasps.

Only tested on Linux, but it works with HAVE_LIBUSB_1_0 on or off (there's some slightly different code in the two versions of usbOpenDevice()).
2023-12-04 01:28:53 -05:00
MCUdude
9524908a34 Add support for specifying bit clock in frequency as well 2023-12-02 23:31:01 +01:00
MCUdude
55c566d07c Add jtag3_get_vtarget 2023-12-02 22:53:48 +01:00
MCUdude
27e5e61c46 Add jtag3_get_sck_period 2023-12-02 22:39:49 +01:00
MCUdude
c118c3ae3c fix segfault when using the terminal sck command 2023-12-02 21:49:28 +01:00
Martin
6e19eda344 faster build.sh script with option -j (-> discussion #1585)
Signed-off-by: Martin <Ho-Ro@users.noreply.github.com>
2023-12-02 21:23:46 +01:00
stefanrueger
5501c63a63
Update NEWS 2023-12-01 15:47:42 +13:00
stefanrueger
2297a310f8
Fix spacing in programmer display function 2023-12-01 15:46:02 +13:00
Hans
54c33cefaa
Add more PL2303 compatible USB PIDs (#1583)
* Add more pl2303 compatible USB PIDs

* Use formatting from -c*

* Fix typo
2023-12-01 15:40:02 +13:00
Stefan Rueger
2684de587b
Merge pull request #1581 from stefanrueger/is_dryrun
Ignore port settings when using -c dryrun
2023-12-01 15:39:43 +13:00
Stefan Rueger
dc4ce4766e
Merge pull request #1580 from stefanrueger/regfile
Provide terminal `regfile` command
2023-12-01 15:39:28 +13:00
Stefan Rueger
633669b1cc
Merge pull request #1574 from Ho-Ro/get_4_1570
new functions (#1570): get_vtarget, get_varef, get_fosc, get_sck_period
2023-12-01 15:39:06 +13:00
Martin
af226823df parms spacing correction (jtagmkI); parms sequence correction (stk500v2)
Signed-off-by: Martin <Ho-Ro@users.noreply.github.com>
2023-11-30 17:34:19 +01:00
Martin
aaa26d9169 Last (?) tidying according review from MCUdude and stefanrueger
Signed-off-by: Martin <Ho-Ro@users.noreply.github.com>
2023-11-29 22:17:22 +01:00
stefanrueger
43f36484e1
Downgrade message reporting change of Vtarg 2023-11-29 23:18:22 +13:00
stefanrueger
de3a15d664
Document regfile terminal command 2023-11-28 00:57:03 +13:00
stefanrueger
c1d85f15f4
Ignore port settings when using -c dryrun 2023-11-27 11:16:52 +13:00
Martin
b438ba5233 update stk500v1 sck display
Signed-off-by: Martin <Ho-Ro@users.noreply.github.com>
2023-11-26 19:39:23 +01:00
Martin
2ec638f94b variable xtal setting; formatting
Signed-off-by: Martin <Ho-Ro@users.noreply.github.com>
2023-11-26 19:39:23 +01:00
Martin
64c82fdb35 fosc / sck test for most stk500v2 based programmer (except mk3?)
difficult to test w/o programmer HW (only orig STK500 (v2) and SMo)

Signed-off-by: Martin <Ho-Ro@users.noreply.github.com>

# Conflicts:
#	src/stk500v2.c
2023-11-26 19:39:23 +01:00
Martin
42a7f671bb fosc / sck test for most stk500v2 based programmer (except mk3?)
difficult to test w/o programmer HW (only orig STK500 (v2) and SMo)

Signed-off-by: Martin <Ho-Ro@users.noreply.github.com>
2023-11-26 19:39:23 +01:00
Martin
d3a142961c fix sck typo wrong parameter
Signed-off-by: Martin <Ho-Ro@users.noreply.github.com>
2023-11-26 19:39:23 +01:00
Martin
c5e117dacb get_sck_period() and get_vtarget() for JTAG1
Signed-off-by: Martin <Ho-Ro@users.noreply.github.com>
2023-11-26 19:39:23 +01:00
Martin
29a315c36d fix memory access error, provide 4 get_ functions for stk50v2
Signed-off-by: Martin <Ho-Ro@users.noreply.github.com>
2023-11-26 19:39:23 +01:00
Martin
4444ca8b9c new functions (#1570): get_vtarget, get_varef, get_fosc, get_sck_period
this is only a proof of concept
declarations for libavrdude, parser in term.c
sample implementations in stk500v1.c

Signed-off-by: Martin <Ho-Ro@users.noreply.github.com>
2023-11-26 19:39:23 +01:00
stefanrueger
7c180e4559
Provide terminal regfile command 2023-11-27 00:12:55 +13:00
stefanrueger
56a192bb82
Initialise dryrun io memory from register file 2023-11-27 00:12:23 +13:00
stefanrueger
7b64287fba
Provide str_matched_by(), str_casematched_by(), str_is_pattern() 2023-11-27 00:11:01 +13:00
stefanrueger
c37933720f
Provide avr_locate_isrtable(), avr_locate_register_file(), avr_locate_register(), avr_locate_registerlist() 2023-11-27 00:07:59 +13:00
stefanrueger
5830fbfdc3
Update avrintel.[ch] with register files 2023-11-27 00:04:00 +13:00
stefanrueger
9464b0c35a
Update NEWS 2023-11-26 23:00:26 +13:00
Stefan Rueger
e0aee95805
Merge pull request #1577 from stefanrueger/config_value
Provide and use libavrude functions to access part config values
2023-11-26 22:57:08 +13:00
stefanrueger
f4de378751
Provide avr_locate_upidx(), avr_locate_configitems(), avr_locate_configlist() 2023-11-26 19:09:42 +13:00
stefanrueger
65901cf570
Fix access of internal uP_table given the part 2023-11-24 15:49:12 +13:00
stefanrueger
879ea06545
Use avr_get_config_value() to determine OCDEN fuse setting 2023-11-23 17:44:54 +13:00
stefanrueger
fd1c49e538
Provide avr_get_config_value() and avr_set_config_value() functions
Example usage:

  int ocden = 0;
  if(avr_get_config_value(pgm, p, "ocden", &ocden) == 0 && ocden) // ocden == 1 means disabled
    pmsg_warning("OCDEN fuse not programmed, single-byte EEPROM updates not possible\n");
2023-11-23 17:42:07 +13:00
stefanrueger
606658a12d
Update NEWS 2023-11-22 23:50:16 +13:00
Stefan Rueger
bf1aa2bcb8
Merge pull request #1576 from mcuee/mingw_readline_test
Add GNU readline to mingw github action
2023-11-22 23:41:34 +13:00
Stefan Rueger
6df3f9894b
Merge pull request #1571 from stefanrueger/sram
Add memory sram and remove memory data
2023-11-22 23:37:47 +13:00
Stefan Rueger
c394fcf23e
Merge pull request #1569 from mcuee/cmake_update
Update src/CMakeLists.txt
2023-11-22 23:36:49 +13:00
Hans
664d36df07
Update part cmd (#1568)
Co-authored-by: stefanrueger <stefan.rueger@urclocks.com>
2023-11-22 23:35:47 +13:00
Martin
92c576d942
Support for STK500 v1 and v2 devices with STK500_XTAL != 7372800 (#1566)
* fix -x vtarg handling (HAS_VTARG_READ vs. HAS_VTARG_ADJ)
* stk500v1: implement new option -x xtal=nnn (part of #1560)
* fix parsing of frequencies, values w/o k or M prefix were not recognised
   now frequency parameter fosc=nnnn or fosc=nnnnH[z] are also ok
* stk500v2: xtra argument -x xtal=nnnn
* unify xtra argument messages for v1 and v2, better error message wording
* update man and doc
* stk500v1: add option -B handling identical to stk500v2
* allow spaces in extra parameter, e.g. -x "fosc= .1e3 kHz"

Signed-off-by: Martin <Ho-Ro@users.noreply.github.com>
2023-11-22 22:23:45 +13:00
mcuee
c4b5097b1f
Use -static linking option for MinGW
This will prevent the dependency to libwinpthread-1.dll.
2023-11-20 15:39:36 +08:00
mcuee
390e3bacd8
Add GNU readline to mingw github action
Same as https://github.com/avrdudes/avrdude/pull/1513.
2023-11-20 15:23:02 +08:00
stefanrueger
a3a1871d9b
Sort all memories of all parts in canonical order 2023-11-17 14:28:51 +13:00
stefanrueger
1b9d087004
Handle SRAM r/w 2023-11-16 11:27:22 +13:00
stefanrueger
1d2a36c6db
List memory sram after io 2023-11-16 11:14:07 +13:00
stefanrueger
309e6baf18
Add memory sram at the expense of data
The memory data was introduced for the sole purpose to provide an
nvm_data_offset for Microchip programmers. As an address offset it would
tell programmers to read/write in data space. It so turned out that this
nvm_data_offset always was 0x1000000 for PDI and UPDI parts.

This commit removes this artificial data memory and treats the data offset
in the code as what it currently is: a constant.

At the same time the commit introduces an sram memory with offset and size
for virtually all parts known to AVRDUDE.
2023-11-15 22:55:10 +13:00
mcuee
20b6df6b04
Update src/CMakeLists.txt
This is to adopt the CMake improvements in PR #1553 even though the PR itself was abondoned.

The author of the change is @Youw.
2023-11-14 20:55:35 +08:00
stefanrueger
c82fec9c4b
Update NEWS 2023-11-13 02:33:24 +00:00
Hans
ce59853981
Print warning when avrdude and avrdude.conf versions doesn't match (#1564) 2023-11-13 02:31:11 +00:00
Hans
71bf4f72a9
Always print error if part and programmer doesn't have a common programming interface (#1563)
* Harmonize WIN32 implementation of serial time-outs with Posix

This is from @mariusgreuel in Issue #1249.
https://github.com/avrdudes/avrdude/issues/1249

> The WIN32 time-out is specified as ReadTotalTimeoutConstant + buflen * ReadTotalTimeoutMultiplier, which makes it potentially much longer than the Posix one (i.e. at least double). ReadIntervalTimeout is also set to timeout, which essentially renders the interval timeout ineffective, so IMHO, we should explicitly disable that feature.

* Update NEWS

* Always print error if part and programmer doesn't have a common programming interface
even though the user uses -F. It won't exit though.

* Don't mention -F in error message if -F is already used

---------

Co-authored-by: mcuee <xiaofanc@gmail.com>
Co-authored-by: Stefan Rueger <stefan.rueger@urclocks.com>
2023-11-13 02:30:30 +00:00
Stefan Rueger
fb550221c7
Merge pull request #1555 from stefanrueger/option-N
Provide option -N for do not load personal config file
2023-11-13 02:29:10 +00:00
stefanrueger
0c385910a8
Update NEWS 2023-11-11 17:10:05 +00:00
Stefan Rueger
9596faac79
Merge pull request #1557 from stefanrueger/programmer-not-recognised
Test programmers for prog_modes and type
2023-11-11 16:47:43 +00:00
Stefan Rueger
0fe1bf0e29
Merge pull request #1556 from stefanrueger/no-paged-eeprom
Remove paged eeprom property from ATtiny43U
2023-11-11 16:47:02 +00:00
Stefan Rueger
736c158d0b
Merge pull request #1554 from stefanrueger/signature-write
Review write_byte() functions
2023-11-11 16:31:36 +00:00
Stefan Rueger
84e7ff134d
Suppress multiple-modes warnings for dryrun type programmers 2023-11-04 15:08:47 +00:00
Stefan Rueger
cf4285f5b8
Test programmers for prog_modes and type
This corrects the error message when AVRDUDE cannot use a programmer to
say it is owing to lack of prog_modes or type.
2023-11-03 17:21:52 +00:00
Stefan Rueger
3f647ec6db
Remove paged eeprom property from ATtiny43U
The property paged should only be used for flash of classic parts.
2023-11-03 17:18:38 +00:00
Stefan Rueger
ff3e65e34a
Provide option -N for do not load personal config file 2023-11-03 17:15:15 +00:00
Stefan Rueger
97badba85d
Review write_byte() functions ...
adding code that allows read-only memories to appear written successfully
provided the data to be written is already in the memory. This is useful
so that "writing" a backup to read-only memories works
  - Without generating an error
  - Without actually trying to write to the part

Trying to write a read-only memory with a byte that is not there will
cause a write error. This is useful if for example one tries to write a
backup of a part to another part with different signature. If the
signature is written back first, this constitutes a "check we are writing
to the same type of part".
2023-11-03 17:07:03 +00:00
Stefan Rueger
08b82ea69e
Update NEWS 2023-11-03 13:46:13 +00:00
Stefan Rueger
c37a90907b
Merge pull request #1550 from mcuee/issue1249
Harmonise WIN32 and POSIX serial comms timeout
2023-11-03 13:40:24 +00:00
朝日薫
a0dfe3b377
Issue#1546 Allow UPDI_SIB of AVR_EB in serialupdi (#1549) 2023-11-03 13:38:31 +00:00
朝日薫
d42f7d8ae1
Change execution position of REVID check (#1543) 2023-11-03 13:33:51 +00:00
mcuee
8222ad8ffc
Add Arduino avrdude_packing github action for git man (#1540)
Co-authored-by: Umberto Baldi <34278123+umbynos@users.noreply.github.com>
2023-11-03 13:27:36 +00:00
Stefan Rueger
d8b9b92b2a
Merge pull request #1538 from stefanrueger/memory-types
Introduce memory types in lieu of string comparisons with memory names
2023-11-03 13:24:12 +00:00
Stefan Rueger
f9920fc11e
Treat chip_rev as unsigned char 2023-11-03 13:05:01 +00:00
Stefan Rueger
291f9ff288
Remove unused variables 2023-11-03 13:00:27 +00:00
Stefan Rueger
9c894e159d
Set readsize and page_size of UPDI fuses to 1 ...
... so that the fuses access is byte-wise not by paged_load/wite
2023-11-02 22:42:25 +00:00
Stefan Rueger
528b56b1c7
Use __func__ in calls of trace_buffer() 2023-11-02 18:32:13 +00:00
Stefan Rueger
37df3462e0
Fix usbdev_recv_frame communication trace 2023-11-02 18:16:40 +00:00
Stefan Rueger
124fcc8110
Unify communication traces using trace_buffer() or trace2_buffer() 2023-11-02 16:58:24 +00:00
Stefan Rueger
0fc5749c24
Merge branch 'avrdudes:main' into memory-types 2023-11-02 11:48:21 +00:00
Stefan Rueger
96b081b2f9
Update NEWS 2023-11-02 01:18:48 +00:00
Stefan Rueger
53d161d1a3
Fix typo 2023-11-02 01:13:54 +00:00
mcuee
0db4cb0125
Harmonize WIN32 implementation of serial time-outs with Posix
This is from @mariusgreuel in Issue #1249.
https://github.com/avrdudes/avrdude/issues/1249

> The WIN32 time-out is specified as ReadTotalTimeoutConstant + buflen * ReadTotalTimeoutMultiplier, which makes it potentially much longer than the Posix one (i.e. at least double). ReadIntervalTimeout is also set to timeout, which essentially renders the interval timeout ineffective, so IMHO, we should explicitly disable that feature.
2023-11-01 10:58:06 +08:00
Stefan Rueger
76cbf91a19
Add notice2() messages for sigrow access 2023-10-31 17:09:18 +00:00
Stefan Rueger
c9eb0659f6
Suggest -xrestore when flash overlaps the bootloader in -c urclock 2023-10-31 13:31:56 +00:00
Stefan Rueger
4622a6d429
Add sigrow sub-memories to jtagmkII_read_byte() 2023-10-31 11:30:39 +00:00
Stefan Rueger
566cfad7e9
Review and fix single fuse r/w for jtag2/jtag3 2023-10-31 00:20:23 +00:00
Stefan Rueger
dab59045de
Review and fix fuses r/w for jtag3 2023-10-30 23:32:44 +00:00
Stefan Rueger
af4614e2d8
Handle sigrow sub-memories in jtagmkII_read_byte() 2023-10-30 19:17:28 +00:00
Stefan Rueger
d6f4cdd72b
Show parameter that could not be set 2023-10-30 18:49:03 +00:00
Stefan Rueger
2bb36b9b0b
Merge pull request #1547 from stefanrueger/parse-avrdude_version
Add avrdude_conf_version to grammar
2023-10-30 14:26:21 +00:00
Stefan Rueger
685d9bcf77
Add AVRDUDE_FULL_VERSION to configure.ac 2023-10-30 10:43:26 +00:00
Stefan Rueger
54eacc5119
Convert avr_locate_mem(p, string) to avr_locate_mem_by_type()
Rather than finding memories by name this finds memories by the correct
type further separating memory names from their functionality.

Also fixes a few unchecked avr_locate_mem() calls that could lead to
segmentation faults.
2023-10-30 02:14:05 +00:00
Stefan Rueger
2736663b21
Add avrdude_conf_version to grammar 2023-10-30 02:01:21 +00:00
mcuee
9dfb61646a
Merge pull request #1542 from Youw/main
Add Avrdude build version into avrdude.conf
2023-10-29 10:46:34 +08:00
Ihor Dutchak
7cf7c73636 Add Avrdude build version into avrdude.conf 2023-10-28 23:46:35 +03:00
mcuee
e99991202f
Merge pull request #1539 from mcuee/avrdude_packing
To support MinGW cross compiler
2023-10-28 12:56:04 +08:00
mcuee
54f2fe5ee5
To support MinGW cross compiler
This is the same as avrdude-packing patch.
https://github.com/arduino/avrdude-packing/blob/main/patches/0007-Cmake-fix-build-not-working-with-mingw-toolchain.patch
2023-10-28 12:47:42 +08:00
Stefan Rueger
2be7f7e527
Refer to memory rather than memory type 2023-10-27 00:28:29 +01:00
Stefan Rueger
03db6e5ca9
Use memory type for fuse memories instead of fuse names 2023-10-27 00:07:34 +01:00
Stefan Rueger
c8d11f6547
Replace str_eq(m->desc, "(usersig|userrow|prodsig|sigrow") with macros 2023-10-25 16:44:55 +01:00
Stefan Rueger
cd53766d1d
Replace str_eq(m->desc, "...") with mem_is_...(m) 2023-10-25 16:35:11 +01:00
Stefan Rueger
7bdd61016f
Replace avr_mem_is_...() functions with macros 2023-10-25 13:33:01 +01:00
Stefan Rueger
872fb9d53e
Replace and remove avr_memstr_is_...() functions 2023-10-25 13:24:37 +01:00
Stefan Rueger
6e2a7a88a6
Add mem->type to encode memory types and attributes 2023-10-25 12:13:36 +01:00
Stefan Rueger
26aedba188
Rename memtype to memstr, memchr or mtype
The name memtype can mean different things in the AVRDUDE src.
Mostly it means the name string of the memory, eg, "flash" or
"eeprom"; sometimes it is a character designating a memory, eg, 'E'
for "eeprom"; and yet at other times it means a programmer-defined
memory type, eg, MTYPE_BOOT_FLASH. The occurrences of memtype in
the code have now neen renamed appropriately.
2023-10-25 00:05:25 +01:00
Stefan Rueger
d6c61f5fab
Update NEWS 2023-10-24 00:05:18 +01:00
Stefan Rueger
9b97480f3a
Merge pull request #1533 from MCUdude/sanguino-bl-hash
Add bootloader hashes from the Sanguino Arduino core repo
2023-10-24 00:02:18 +01:00
Stefan Rueger
9115cac592
Merge pull request #1531 from dbuchwald/nvm3
Fix SerialUPDI with NVM v3 controller
2023-10-24 00:01:00 +01:00
Stefan Rueger
2a50032214
Review LED support (#1528)
The RDY LED is set once the programmer is initialised and switched
off when AVRDUDE exits. During reading, writing or erasing the target
the PGM LED flashes with around 2.5 Hz, whilst the VFY LED comes on
during -U verification of the uploaded contents. Errors are indicated
with the ERR LED.

Assuming AVRDUDE got to the point where LEDs are accessible and the RDY
LED was switched on then, on exit, AVRDUDE will leave the LEDs in the
following states:

| PGM | VFY | ERR | Semantics                                        |
| --- | --- | --- | ------------------------------------------------ |
| off | off | off | OK: all tasks done without errors                |
| off | off | on  | Some error not related to read/write/erase       |
| on  | off | on  | Read/write/erase error                           |
| off | on  | on  | Verification error but no read/write/erase error |
| on  | on  | on  | Read/write/erase error and verification error    |

Other combinations should not show after exit.
2023-10-23 23:57:59 +01:00
Stefan Rueger
5adf0124c8
Add provenance of bootloaders considered in hash lish 2023-10-23 13:45:34 +01:00
MCUdude
4c62a347f7 Add bootloader hashes from the Sanguino Arduino core repo
https://github.com/Lauszus/Sanguino
2023-10-22 23:06:17 +02:00
Dawid Buchwald
fb7e65bd63 Fix candidate for issues with NVM v3 controller 2023-10-22 21:03:03 +02:00
Stefan Rueger
481a91dd95
Update NEWS 2023-10-18 01:05:21 +01:00
Stefan Rueger
809b33d411
Merge pull request #1526 from stefanrueger/prodsig-jtag3
Enable prodsig read for jtag3 programmers
2023-10-18 00:57:25 +01:00
Stefan Rueger
872e9090da
Merge pull request #1525 from stefanrueger/prodsig-jtagmk2
Enable prodsig read for jtagmkII programmers
2023-10-18 00:57:10 +01:00
Stefan Rueger
b8a0347331
Merge pull request #1524 from stefanrueger/prodsig-jtagmk1
Enable prodsig read for jtagmkI programmers
2023-10-18 00:56:55 +01:00
Stefan Rueger
be895f8354
Merge pull request #1523 from stefanrueger/tempsense
Fix tempsense size, AVR-EB memory offsets and avrdude.conf memory order
2023-10-18 00:56:40 +01:00
Stefan Rueger
f8b5137bed
Merge pull request #1522 from stefanrueger/prodsig-dryrun
Model prodsig for -c dryrun
2023-10-18 00:56:22 +01:00
Stefan Rueger
b763c2411a
Merge pull request #1521 from stefanrueger/prodsig-avrftdi_jtag
Enable prodsig read for avrftdi_jtag type programmers
2023-10-18 00:56:05 +01:00
Stefan Rueger
8f2fcf6d43
Merge pull request #1520 from stefanrueger/prodsig-isp
Enable prodsig read for stk500v2 based programmers
2023-10-18 00:55:41 +01:00
Stefan Rueger
ed1c262d65
Enable prodsig read for jtag3 programmers 2023-10-17 11:13:50 +01:00
Stefan Rueger
0d1688d2b5
Enable prodsig read for jtagmkII programmers 2023-10-17 11:11:27 +01:00
Stefan Rueger
5f35b901b8
Enable prodsig read for jtagmkI programmers 2023-10-17 11:08:20 +01:00
Stefan Rueger
c1df5937db
Initialise all prodsig sub-memories for -c dryrun UPDI-parts 2023-10-17 00:51:56 +01:00
Stefan Rueger
89c7143177
Bring parts in avrdude.conf into canonical order 2023-10-17 00:22:37 +01:00
Stefan Rueger
2883d13110
Bring memories into more logical order 2023-10-17 00:16:31 +01:00
Stefan Rueger
0fc2eac349
Fix tempsense memory size for AVR-Dx and AVR-Ex parts 2023-10-17 00:15:27 +01:00
Stefan Rueger
35eb26c74c
Fix AVR-EB memory offsets 2023-10-17 00:13:46 +01:00
Stefan Rueger
d68110786d
Fix tempsense memory typo 2023-10-17 00:12:18 +01:00
Stefan Rueger
cbcdaa1683
Merge branch 'avrdudes:main' into prodsig-dryrun 2023-10-16 23:01:38 +01:00
Stefan Rueger
61daaa31b6
Merge branch 'avrdudes:main' into prodsig-isp 2023-10-16 23:01:17 +01:00
Stefan Rueger
e83dede617
Merge branch 'avrdudes:main' into prodsig-avrftdi_jtag 2023-10-16 21:13:26 +01:00
Stefan Rueger
cbac6349b0
Update NEWS 2023-10-16 21:12:20 +01:00
Stefan Rueger
b2a5848b8a
Merge pull request #1519 from stefanrueger/part-programmer-comments
Add id as comment to avrdude.conf definitions
2023-10-16 21:11:14 +01:00
Stefan Rueger
88b5fcd0fb
Model prodsig for -c dryrun 2023-10-16 21:06:30 +01:00
Stefan Rueger
03e7ffda90
Enable prodsig read for avrftdi_jtag type programmers 2023-10-16 21:01:33 +01:00
Stefan Rueger
c342cce247
Enable prodsig read for stk500v2 based programmers 2023-10-15 18:54:55 +01:00
Stefan Rueger
6125bdcff7
Add id as comment to avrdude.conf definitions 2023-10-15 17:46:18 +01:00
Stefan Rueger
f2378875b0
Update NEWS 2023-10-15 16:59:19 +01:00
Stefan Rueger
5f97fdc08c
Merge pull request #1518 from stefanrueger/prodsig
Review and update prodsig memories for U/PDI parts
2023-10-15 16:53:06 +01:00
Stefan Rueger
77a69aad54
Merge pull request #1517 from stefanrueger/scratchmonkey-leds
Add LED support for ScratchMonkey programmer
2023-10-15 16:52:43 +01:00
Stefan Rueger
59bc4354b0
Merge pull request #1511 from stefanrueger/usbtiny-readback
Adapt stk500 readback values for usbtiny.c
2023-10-15 16:51:46 +01:00
Stefan Rueger
40350be950
Read sigrow for ATmega32[48]PB using ISP (#1510)
* Read sigrow for ATmega32[48]PB using ISP
* Rename sigrow memory to progsig for 4 ISP/TPI parts
* Create a memory alias from sigrow to prodsig
* Exempt prodsig from checking irregular address patters in ISP command
* Update documentation for sigrow/prodsig
* Include signature in prodsig memory for ATtiny102 and ATtiny104
2023-10-15 16:45:03 +01:00
Hans
99a9a60608
Support for serial port "touch" functionality using libserialport (#1507)
This makes it possible to upload to boards like the Arduino Leonardo and Arduino Nano Every wwithout using an external tool to enter bootloader mode

Co-authored-by: Stefan Rueger <stefan.rueger@urclocks.com>
2023-10-15 16:42:52 +01:00
Stefan Rueger
f2480ea6b2
Make sigrow an alias for prodsig in modern parts (U/PDI i/f)
This reflects a change in language in data sheets over time for the
production signature row memory.
2023-10-14 14:38:43 +01:00
Stefan Rueger
33aefcb9f9
Include signature in prodsig memory
Data sheets include the signature in the production signature row
(prodsig/sigrow memory) while .atdf excludes the 3 signature bytes.

For example the AVR16EB14 datasheet lets sigrow start at 0x1080
with a size of 128 while the atdf file specifies the start as
0x1083 with a size of 125.

The former makes more sense.

This commit also sets page_size to the prodsig size if it is a power of 2
otherwise it is set to 1.
2023-10-14 14:13:22 +01:00
Stefan Rueger
0264c9cc03
Update prodsig memory size from .atdf files 2023-10-14 14:01:51 +01:00
Stefan Rueger
d82c2984e0
Add LED support for ScratchMonkey programmer 2023-10-13 13:26:44 +01:00
mcuee
331d46f15f
Merge pull request #1516 from mcuee/revert_pr_1513 2023-10-13 12:09:04 +08:00
mcuee
8d71bc7ceb
Update build.yml to revert PR #1513
PR #1513 (Add GNU readline to mingw github action) brings in undesired dependency of libwinpthread-1.dll to the mingw32/mingw64 binaries.
2023-10-13 11:07:51 +08:00
mcuee
55853eb422
Add GNU readline to mingw github action (#1513)
* Update build.yml to enable GNU readline for MinGW build

* Update build.yml to include termcap and ncurses
2023-10-11 12:02:43 +08:00
mcuee
7f8e8a1ad3
libserialport github action (#1512)
* Update build.yml to include libserialport except MSVC
2023-10-10 21:39:40 +08:00
Stefan Rueger
64f4646b1a
Adapt stk500 readback values for usbtiny.c 2023-10-10 01:16:25 +01:00
Stefan Rueger
c8b4e915b3
Fix memory concatenation error 2023-10-06 16:47:28 +01:00
Stefan Rueger
9735789c21
Update NEWS 2023-09-29 00:29:18 +01:00
Stefan Rueger
70e5307841
Merge pull request #1506 from stefanrueger/reduce-stk500v2-getsync-timeout
Reduce stk500v2_getsync() timeout
2023-09-29 00:27:22 +01:00
Stefan Rueger
b76750d392
Merge pull request #1505 from stefanrueger/add-wiring-reset-delay
Add -xdelay=n for -c wiring to modify sleep after dtr/rts reset
2023-09-29 00:25:29 +01:00
Stefan Rueger
2f9cd84791
Improve FTDI documentation in avrdude.conf.in 2023-09-29 00:23:25 +01:00
Stefan Rueger
aa2f45111b
Reduce DTR/RTS-low time for reset generation to 100 us
Standard AVR reset circuits deploy a connection from the DTR/RTS line of a
USB-to-serial chip to the AVR via a small capacitor, see

  https://onlinedocs.microchip.com/pr/GUID-F626284A-58F0-4C25-A6F3-0EA5054F3E2B-en-US-6/index.html?GUID-B80B25FF-E9D7-4766-B562-DA197B8B938C

Setting DTR/RTS low once will issue a reset. Setting this signal high
again after a short time ensures that a direct connection DTR/RTS to reset
also works. The duration of pulling DTR/RTS low must be relatively short,
say RC/10, in order to avoid a reset spike above Vcc. If Vcc exceeds 5.5 V
then a full 2 Vcc reset spike can potentially trigger HV programming.

See also
 - https://github.com/avrdudes/avrdude/pull/1504#issuecomment-1735295710
 - https://github.com/avrdudes/avrdude/pull/1505#issuecomment-1738053365
2023-09-28 00:04:06 +01:00
Stefan Rueger
2c7c12d109
Reduce stk500v2_getsync() timeout 2023-09-26 23:24:28 +01:00
Stefan Rueger
35dcf686a2
Add -xdelay=n for -c wiring to modify sleep after dtr/rts reset 2023-09-26 23:19:34 +01:00
Stefan Rueger
8ed9615f86
Update NEWS 2023-09-22 23:33:58 +01:00
Hans
0be6568b76
Add serial port discovery (#1498)
Co-authored-by: Stefan Rueger <stefan.rueger@urclocks.com>
2023-09-22 23:21:57 +01:00
Stefan Rueger
431fe61ffa
Merge pull request #1497 from stefanrueger/add-serialadapter
Provide serialadapter entity in avrdude.conf
2023-08-31 17:52:55 +01:00
Stefan Rueger
5400005b50
Add is_serialadapter to programmer structure 2023-08-31 00:10:14 +01:00
Stefan Rueger
99373d109f
Update serialadapter documentation 2023-08-29 18:21:16 +01:00
Stefan Rueger
aaddbbf187
Provide function that lists available seriadapters 2023-08-29 00:26:33 +01:00
Stefan Rueger
91ffab5fc6
Provide serialadapter entity in avrdude.conf 2023-08-29 00:07:57 +01:00
Stefan Rueger
b8c47f3999
Update NEWS 2023-08-27 19:06:00 +01:00
Stefan Rueger
ad56d6d238
Merge pull request #1495 from stefanrueger/read-signature
Review calibration read command in avrdude.conf
2023-08-27 19:02:55 +01:00
Stefan Rueger
54ce12a649
Merge pull request #1491 from stefanrueger/avr-eb
Add AVR-EB parts
2023-08-27 18:59:02 +01:00
Stefan Rueger
b660a7e85f
Remove superfluous newlines in avrdude.conf 2023-08-27 18:57:34 +01:00
Stefan Rueger
622f753d5f
Review calibration read command in avrdude.conf 2023-08-26 00:49:08 +01:00
Stefan Rueger
784676ff68
Update bootrow documentation 2023-08-25 22:01:27 +01:00
Stefan Rueger
e3eb816303
Treat fuse and lfuse the same 2023-08-15 20:41:05 +01:00
Stefan Rueger
fe721ff555
Update documentation for bootrow and pdicfg 2023-08-15 20:24:32 +01:00
Stefan Rueger
6ed529179b
Extend terminal config command to two-byte fuses 2023-08-15 20:23:26 +01:00
Stefan Rueger
161d5aa4a4
Consider bootrow and pdicfg for terminal cache and dryrun 2023-08-15 20:21:24 +01:00
Stefan Rueger
9e22afae7c
Add AVR16EB(14|20|28|32) to avrdude.conf 2023-08-15 20:11:45 +01:00
Stefan Rueger
4969074ee4
Update avrintel.[ch] 2023-08-15 19:59:51 +01:00
Stefan Rueger
772603aff9
Update NEWS 2023-08-14 22:50:57 +01:00
Stefan Rueger
1795371b02
Merge pull request #1488 from stefanrueger/io
Add io memory for classic parts
2023-08-14 22:48:03 +01:00
Stefan Rueger
a6b6b96581
Merge pull request #1487 from stefanrueger/incompatible
Exit if part and programmer are incompatible
2023-08-14 22:47:14 +01:00
Stefan Rueger
ccdf80f8cb
Merge pull request #1486 from stefanrueger/overlapping-memories
Fix overapping XMEGA flash memories for dryrun programmer
2023-08-14 22:46:49 +01:00
Stefan Rueger
040ea106ce
Merge pull request #1482 from MCUdude/code-formatting
Replace string comparison functions
2023-08-14 22:46:26 +01:00
stefanrueger
f4b2f69451
Document io memory 2023-08-13 00:02:23 +01:00
stefanrueger
867b546a5e
Add io memory for classic parts 2023-08-13 00:01:52 +01:00
stefanrueger
b91c03d0e7
Add memories on -p*/i if needed 2023-08-12 23:26:42 +01:00
stefanrueger
74bcb5c903
Suppress incompatible programming mode warnings for dryrun programmer 2023-08-11 18:39:11 +01:00
stefanrueger
65038d812a
Allow all parts with dryrun programmer 2023-08-10 10:14:46 +01:00
stefanrueger
f2263e71bb
Check part-programmer compatibility early on 2023-08-09 23:13:33 +01:00
MCUdude
0edc3657eb revert str_casecmp replacement
libavrdude.h isn't included in avrintel.c/h
2023-08-09 23:15:42 +02:00
MCUdude
2501fcd97b Replace strcasecmp with str_caseeq 2023-08-09 23:07:41 +02:00
stefanrueger
773fa6948e
Exit if part and programmer are incompatible 2023-08-09 22:05:01 +01:00
MCUdude
72597dbd16 replace strstr with str_contains 2023-08-09 22:52:02 +02:00
MCUdude
e6b5fb3a77 Replace even more strcmp/strncmp with str_eq/str_starts 2023-08-09 22:42:41 +02:00
MCUdude
5e57dffec3 Less permissive fuse name handling
Thanks for the hint @stefanrueger
2023-08-09 20:45:32 +02:00
stefanrueger
e8cd91092d
Fix overapping XMEGA flash memories for dryrun programmer 2023-08-09 18:35:15 +01:00
Hans
4988994a9d
Merge branch 'avrdudes:main' into code-formatting 2023-08-06 12:23:42 +02:00
MCUdude
bc715f7cd0 replace strcmp with str_eq 2023-08-05 23:07:28 +02:00
MCUdude
55fe583cfc replace strcasecmp with str_caseeq 2023-08-05 22:02:16 +02:00
MCUdude
f94872140d simplify fuse handling logic
+ minor formatting changes
2023-08-05 22:01:37 +02:00
MCUdude
a02fb53578 replace strcmp and strncmp with str_eq and str_starts 2023-08-05 21:55:23 +02:00
MCUdude
f8ab2d3aa3 simplify fuse handling logic 2023-08-05 21:38:01 +02:00
MCUdude
9906b86f42 Replace strcmp with str_eq 2023-08-05 21:34:02 +02:00
MCUdude
e1f7ecf4b4 simplify fuse handling logic 2023-08-05 21:18:35 +02:00
MCUdude
9e25c52ae0 replace strcmp and strncmp with str_eq and str_starts 2023-08-05 20:51:54 +02:00
MCUdude
30ed6d36d4 Simply fuse read/write logic 2023-08-05 20:11:52 +02:00
MCUdude
6036f1e289 Replace strcmp with str_eq 2023-08-05 19:52:26 +02:00
Stefan Rueger
c1500dba64
Update NEWS 2023-08-05 18:39:23 +01:00
Stefan Rueger
d5d4c35052
Merge pull request #1474 from MCUdude/megaavr-chiprev
Read chip silicon revision and add IO memory on chips with PDI and UPDI
2023-08-05 18:36:16 +01:00
MCUdude
28d4aa6c20 Change IO memory size accoring to the ATDF files 2023-08-05 11:41:39 +02:00
MCUdude
a9b270ba87 Resolve merge conflict 2023-08-05 08:23:53 +02:00
Stefan Rueger
ea7eed85fc
Update NEWS 2023-08-05 00:38:41 +01:00
Stefan Rueger
fbbcec341d
Merge pull request #1480 from stefanrueger/sib
Provide sib memory for AVR8X parts
2023-08-05 00:23:00 +01:00
Stefan Rueger
77c3b0f5fb
Merge pull request #1470 from MCUdude/fix-vtarg-read
Utilize `HAS_VTARG_READ` defined in avrdude.conf
2023-08-05 00:22:04 +01:00
Stefan Rueger
70190be400
Merge pull request #1468 from stefanrueger/stk500
Fix probing of the generic -c stk500 programmer
2023-08-05 00:21:23 +01:00
Stefan Rueger
0c2f2e63bd
Merge pull request #1324 from jkent/avrftdi
add JTAG support to avrftdi
2023-08-05 00:20:40 +01:00
Stefan Rueger
3a1e9c0e77
Merge pull request #3 from MCUdude/sib-read
Add JTAG3 SIB read
2023-08-03 20:51:47 +01:00
MCUdude
7b90253aa1 deal with more read-only memories 2023-08-03 20:00:31 +02:00
Stefan Rueger
0314e2158a
Add signature to read-only memories in serialupdi_write_byte() 2023-08-03 15:01:59 +01:00
MCUdude
1e4d78f17d Prevent reading more bytes than the SIB memory has 2023-08-03 14:42:37 +02:00
MCUdude
a1bfae3f8e Formating + better read-only memory handling 2023-08-03 14:25:53 +02:00
MCUdude
768a789108 Implement SIB read and add memory boundary checks 2023-08-03 09:46:06 +02:00
Hans
4f02abd4cf
Merge pull request #5 from stefanrueger/sib
Add SIB read to SerialUPDI programmer
2023-08-03 08:39:37 +02:00
MCUdude
819e35a57e Ensure canonical form
Formatted using avrdude -p*/s
2023-08-03 08:17:58 +02:00
MCUdude
13b1c8ca0b remove "revid" and add "io" memory 2023-08-02 22:28:15 +02:00
Stefan Rueger
b9ccd56300
Align spacing 2023-08-02 19:54:25 +01:00
Stefan Rueger
ec4146ceac
Provide sib memory for AVR8X parts 2023-08-02 19:32:36 +01:00
MCUdude
1dedfe5d1b Remove revid memory 2023-08-02 18:49:38 +02:00
MCUdude
aef735844e Add "io" memory to Xmega, tinyAVR0/1/2, megaAVR0 and AVR-Dx/Ex 2023-08-02 18:49:36 +02:00
Stefan Rueger
c1d7f919be
Exit avrftdi_jtag_enable() when encountering incompatible chip
The use of exit() is brought about by the fact that, unlike all other
programming functions, pgm->enable() is of type void, ie, cannot easily
tell the caller something went wrong.
2023-07-31 13:11:57 +01:00
Stefan Rueger
fb63b289c5
Remove not needed inherited properties 2023-07-31 12:57:29 +01:00
Stefan Rueger
1c97e40e7a
Merge branch 'main' into avrftdi 2023-07-31 12:38:44 +01:00
MCUdude
86a1aa1b3c Add extra guards 2023-07-29 22:32:37 +02:00
MCUdude
4c44111a4d Add support for revid readout 2023-07-29 21:06:43 +02:00
MCUdude
0f77c6e617 Add support for revid readout using the stk500v2/xprog protocol 2023-07-29 20:41:19 +02:00
MCUdude
916bd80b53 Add read_chip_rev to JTAG programmers
That are set up to communicate with Xmega chips
2023-07-28 23:42:22 +02:00
MCUdude
03aeb540c6 Add xmega revid memory 2023-07-28 23:31:21 +02:00
MCUdude
970976f74a Check if pgm->read_chip_rev exists before executing 2023-07-28 19:03:14 +02:00
Hans
6c4414e607
Merge pull request #4 from dbuchwald/megaavr-chiprev
Add serialupdi chip silicon revision number read
2023-07-25 19:44:23 +02:00
Dawid Buchwald
ac760ff490 Added support for chip silicon revision number 2023-07-25 19:18:29 +02:00
MCUdude
fab54b7abb Add chip revision readout to jtagmkII 2023-07-24 22:02:42 +02:00
MCUdude
419707b130 Tweak debug print message 2023-07-24 22:01:14 +02:00
MCUdude
90cc0075a7 Minor formatting and grammar 2023-07-24 21:57:51 +02:00
MCUdude
a586c6b577 Only print chip revision in verbose mode 2023-07-24 21:23:07 +02:00
MCUdude
b6aee3bf72 Add chip revision readout to jtag3.c 2023-07-24 21:13:11 +02:00
MCUdude
6d8598e009 Add syscfg_base 2023-07-24 21:10:17 +02:00
MCUdude
e063b4a7c1 Fix incorrect sernum offset 2023-07-24 18:44:34 +02:00
Joerg Wunsch
330030ed23 Post-release 7.2
Update version info and NEWS template snippet
2023-07-19 22:46:18 +02:00
Joerg Wunsch
cb9e7e49e6 Prepare for version 7.2
* finalize NEWS for that version
* bump version info for autotools and CMake
2023-07-19 22:30:19 +02:00
MCUdude
73499c027f Remove superfluous float castings 2023-07-18 08:13:02 +02:00
Stefan Rueger
ca3144b783
Recommend trying -c stk500v1 if stk500v2 fails followed by stk500v1 failure
... as it might have been that probing with stk500v2 protocol threw a
stk500v1 firmware off its rails
2023-07-17 21:53:07 +01:00
Stefan Rueger
9f370024c0
Return -1 in stk500v2_open() or stk600v2_open() if drain() or getsync() fails 2023-07-17 19:30:59 +01:00
MCUdude
b25cfccbca Slightly change cmd_parms description
adjustable > useful
2023-07-17 19:26:34 +02:00
MCUdude
ec4423f9de Utilize HAS_VTARG_READ defined in avrdude.conf 2023-07-17 19:23:25 +02:00
Stefan Rueger
68053b18c7
Add teardown call matching the setup call 2023-07-17 17:09:15 +01:00
Stefan Rueger
ccfc13ca15
Probe stk500v2 first then stk500v1 given -c stk500 2023-07-17 16:51:03 +01:00
Stefan Rueger
45e17d7cac
Run setup before probing stk500v1 programmer 2023-07-17 09:14:58 +01:00
Stefan Rueger
6ecd036068
Refrain from closing a programmer that failed opening 2023-07-17 01:39:42 +01:00
Stefan Rueger
fe153acbbf
Fix probing of the generic -c stk500 programmer 2023-07-17 01:35:54 +01:00
Stefan Rueger
5e715e2851
Update NEWS 2023-07-15 00:31:35 +01:00
Stefan Rueger
bc4a164200
Merge pull request #1466 from stefanrueger/usersig-offset
Consider classic part usersig memory offset for jtag3
2023-07-15 00:26:55 +01:00
Stefan Rueger
824860cc8a
Merge pull request #1465 from stefanrueger/fix-n-warning
Fix -n warning for first interactive terminal
2023-07-15 00:26:23 +01:00
Stefan Rueger
d746afbf60
Merge pull request #1461 from stefanrueger/invalid-compiler-warning
Suppress invalid compiler warning
2023-07-15 00:23:43 +01:00
Stefan Rueger
1bb6afea67
Fix typo 2023-07-14 23:32:00 +01:00
Stefan Rueger
0359f0ff90
Remove reference to ATmega128RFA1 wrt usersig documentation 2023-07-14 23:24:15 +01:00
Stefan Rueger
cc9ece1f4c
Remove usersig from ATmega128RFA1 description
In order to keep avrdude.conf short, the parenting of the ATmega*RFR2
parts changed a little, but the net effect of this commit is to remove the
usersig memory from the ATmega128RFA1 description.

Verify this by executing before the commit
$ avrdude -p*/S >/tmp/P

and after the commit
$ avrdude -p*/S | diff - /tmp/P
2023-07-14 23:16:44 +01:00
Jörg Wunsch
9580472c58
Merge pull request #1463 from stefanrueger/flag-f
Bail out on failed initialisation unless -F was given
2023-07-14 23:41:38 +02:00
Stefan Rueger
edac02ff6a
Extend documentation of classic-part usersig memory 2023-07-14 14:38:13 +01:00
Stefan Rueger
532bd01f66
Document classic part usersig programming 2023-07-14 01:03:23 +01:00
Stefan Rueger
e5927c70de
Unset pgm->page_erase if part has no memory that can be page erased 2023-07-14 00:53:35 +01:00
Stefan Rueger
4e2f704c62
Try jtag page erase for classic part usersig memory 2023-07-13 21:14:28 +01:00
Stefan Rueger
7967c2f808
Consider classic part usersig memory offset for jtag3 2023-07-13 01:04:07 +01:00
Stefan Rueger
af6dc59582
Fix -n warning for first interactive terminal 2023-07-11 23:14:44 +01:00
Stefan Rueger
943efdf57c
Bail out on failed initialisation unless -F was given 2023-07-11 22:02:19 +01:00
Stefan Rueger
8f77524e47
Suppress invalid compiler warning
A warning when building under NetBSD 9.3 (gcc 7.5.0) complains about
a comparison of the form lmax <= lmin+MAX_PAD, which is mistaken to
be of the type (X + c) >= X despite lmin and lmax not necessarily
having the same value.

This PR tries to suppress this warning about potential signed overflow by
making lmin, lmax and llen unsigned (size_t).
2023-07-01 15:55:01 +01:00
Stefan Rueger
f722b572f8
Update NEWS 2023-07-01 15:48:25 +01:00
Stefan Rueger
e8a22cde56
Merge pull request #1454 from stefanrueger/unary-minus
Suppress overzealous compiler warnings
2023-07-01 15:46:44 +01:00
Stefan Rueger
2b83310095
Suppress overzealous compiler warnings
Some compilers are overzealous when the unary minus operates on an
unsigned number, and issue a warning. In fact, -u is a perfectly valid
unsigned for any unsigned u, and always has been from K&R C to C++20.
-u is the same as ~u + 1. Unsigned numbers form a modulo group, where -u
is the unique unsigned number that when added to u results in 0.

It is true that neither u nor -u can be negative (because no unsigned
number is) but that should not get a compiler to issue a warning about
the completely legitimate use of -u.
2023-07-01 14:53:56 +01:00
Stefan Rueger
11e8376dfe
Update NEWS 2023-06-28 17:24:19 +01:00
Stefan Rueger
65024b5efa
Add Stefan Rueger to copyright info 2023-06-28 17:23:22 +01:00
Stefan Rueger
82f949dcaa
Remove comma in copyright note 2023-06-28 17:22:59 +01:00
Stefan Rueger
013e9cc8db
Merge pull request #1425 from MCUdude/jtag2updi-rts-dtr
Add jtag2updi -xrtsdtr extended parameter
2023-06-28 17:09:29 +01:00
Stefan Rueger
ef67811f4c
Merge pull request #1450 from stefanrueger/bsdhome
Update info on bsd programmer
2023-06-28 17:08:42 +01:00
Stefan Rueger
9fbc3d7a61
Update Brian Dean's email address 2023-06-27 21:31:07 +01:00
Stefan Rueger
bff4eed585
Provide a copy of the schematic for the very first AVRDUDE programmer 2023-06-27 21:27:11 +01:00
Stefan Rueger
ee64c0c280
Fix typo 2023-06-27 21:14:36 +01:00
Stefan Rueger
20d6f7d2b7
Update the bsd programmer info 2023-06-27 15:10:38 +01:00
MCUdude
c89e9b39ef Merge branch 'main' into jtag2updi-rts-dtr 2023-06-26 22:21:00 +02:00
Stefan Rueger
77c1bfbf02
Update documentation 2023-06-26 00:51:41 +01:00
Stefan Rueger
0727658616
Update NEWS 2023-06-25 17:01:06 +01:00
Stefan Rueger
d84d1611ad
Merge pull request #1439 from stefanrueger/include
Provide terminal include command
2023-06-25 16:57:48 +01:00
Stefan Rueger
d94229a549
Merge pull request #1438 from stefanrueger/empty-flash
Write empty flash memory to file in correct format
2023-06-25 16:57:30 +01:00
Stefan Rueger
27ebb12800
Merge pull request #1430 from stefanrueger/alias-pgms
Use pgm->id list for different names of the same AVR programmer
2023-06-25 16:56:42 +01:00
Stefan Rueger
c12e3f0e0e
Merge pull request #1429 from stefanrueger/scratchmonkey
Add scratchmonkey programmers
2023-06-25 16:56:29 +01:00
Stefan Rueger
ed355d591c
Add S5 record count even when it is zero 2023-06-25 13:58:37 +01:00
Stefan Rueger
e2a45df092
Provide terminal include command
Example
-------

Initialise a config file for ATmega328P with factory settings and edit it:
  $ avrdude -qqTconfig -c dryrun -p m328p >config-m328p.txt
  $ vi config-m328p.txt

The new include command allows this file to be applied before opening a terminal:
  $ avrdude -qq -T"include config-m328p.txt" -t -c dryrun -p m328p
  avrdude> quit

The include option -e prints the lines as comments before processing them:
  $ avrdude -qq -T"include -e config-m328p.txt" -c dryrun -p m328p
  # config sut_cksel=intrcosc_8mhz_6ck_14ck_65ms # 34
  # config ckout=co_disabled # 1
  # config ckdiv8=by_8 # 0
  # config bootrst=application # 1
  # config bootsz=bs_2048w # 0
  # config eesave=ee_erased # 1
  # config wdton=wdt_programmable # 1
  # config spien=isp_enabled # 0
  # config dwen=dw_off # 1
  # config rstdisbl=external_reset # 1
  # config bodlevel=bod_disabled # 7
  # config lb=no_lock # 3
  # config blb0=no_lock_in_app # 3
  # config blb1=no_lock_in_boot # 3

On non-zero verbosity level the include option -e also prints line numbers:
  $ avrdude -vqqq -T"include -e config-m328p.txt" -c dryrun -p m328p
  # 1: config sut_cksel=intrcosc_8mhz_6ck_14ck_65ms # 34
  # 2: config ckout=co_disabled # 1
  # 3: config ckdiv8=by_8 # 0
  # 4: config bootrst=application # 1
  # 5: config bootsz=bs_2048w # 0
  # 6: config eesave=ee_erased # 1
  # 7: config wdton=wdt_programmable # 1
  # 8: config spien=isp_enabled # 0
  # 9: config dwen=dw_off # 1
  # 10: config rstdisbl=external_reset # 1
  # 11: config bodlevel=bod_disabled # 7
  # 12: config lb=no_lock # 3
  # 13: config blb0=no_lock_in_app # 3
  # 14: config blb1=no_lock_in_boot # 3
2023-06-24 14:38:04 +01:00
Stefan Rueger
1816e637d0
Fix out of range warning 2023-06-24 13:57:08 +01:00
Stefan Rueger
e42063488c
Write empty flash memory to file in correct format
-U flash:r:<file>:<fmt> produces an empty file if flash memory is empty
unless `-A` has switched off the trailing 0xff removal. However,
an empty file is not a correct Intel Hex file as it misses the EOF marker:

$ avrdude -qq -c dryrun -p m328p -U flash:r:empty-flash.hex:i
$ avrdude -qq -c dryrun -p m328p -U flash:w:empty-flash.hex:i
avrdude error: no valid record found in Intel Hex file empty-flash.hex
avrdude error: read from file empty-flash.hex failed
srueger@medlar avrdude-main 2005$ (main 5U) ls -l empty-flash.hex
-rw------- 1 srueger srueger 0 Jun 24 12:58 empty-flash.hex

This commit creates empty files with the correct format
 - Intel Hex (EOF record)
 - Motorola S-Record (Start record, EOF record)
 - Number lists (one empty line, ie, one character '\n')
 - Raw binary (empty file, ie, zero characters)
2023-06-24 12:48:46 +01:00
Stefan Rueger
67a417b7dc
Fix typos in comments for usbasp definition 2023-06-24 11:50:10 +01:00
Stefan Rueger
2d59b1c913
Use pgm->id list for different names of the same AVR programmer 2023-06-23 16:40:52 +01:00
Stefan Rueger
7ecce8588d
Add scratchmonkey programmers 2023-06-23 16:18:55 +01:00
Stefan Rueger
114d48c3da
Update NEWS 2023-06-23 16:04:33 +01:00
Stefan Rueger
5a8aff0918
Merge pull request #1424 from stefanrueger/pgmid
Enable -c programmers to access -c string
2023-06-23 15:56:39 +01:00
Stefan Rueger
412a828182
Merge pull request #1423 from stefanrueger/arduino-ft232r
Remove comment and URL for arduino-ft232r programmer
2023-06-23 15:56:14 +01:00
Stefan Rueger
226f6dba7a
Merge pull request #1422 from stefanrueger/usbasp
Update usbasp programmer info
2023-06-23 15:55:41 +01:00
Stefan Rueger
85099ab294
Merge pull request #1421 from stefanrueger/ttl232r
Update URLs for the ttl232r programmer
2023-06-23 15:55:18 +01:00
Stefan Rueger
a7ee086f0a
Merge pull request #1420 from stefanrueger/o-link
Remove outdated web URLs for O-Link
2023-06-23 15:54:49 +01:00
Stefan Rueger
00b01bc34a
Merge pull request #1419 from stefanrueger/microcopter
Update butterfly_mk info
2023-06-23 15:54:20 +01:00
Stefan Rueger
e36b3ffeda
Merge pull request #1418 from stefanrueger/ft2232h
Update ft2232h programmer info and URLs
2023-06-23 15:53:54 +01:00
Stefan Rueger
eee5b1f738
Merge pull request #1417 from stefanrueger/89isp
Update URLs for 89isp programmer
2023-06-23 15:53:25 +01:00
Stefan Rueger
e8aa262323
Merge pull request #1416 from stefanrueger/nightshade
Update alf programmer info and URL
2023-06-23 15:52:57 +01:00
Stefan Rueger
46d30b8fd0
Merge pull request #1415 from stefanrueger/pwroff_after_write
Update reference to AT90S4433 datasheet
2023-06-23 15:52:26 +01:00
Stefan Rueger
79bf63f20b
Merge pull request #1411 from stefanrueger/bootloader-ce
Increase timeout for emulated butterfly chip erase
2023-06-23 15:51:56 +01:00
Stefan Rueger
e3f8260c8d
Merge pull request #1406 from stefanrueger/usersig-m256rfr2
Define usersig memory for ATmega*RF[AR]* parts
2023-06-23 15:50:13 +01:00
Stefan Rueger
d7392ab3c7
Overwrite previous programmer definition for any aliased id too 2023-06-23 14:58:42 +01:00
Stefan Rueger
a6ff5dde83
Match -c<pgmid>/i -p<part>/i patterns independent of case 2023-06-23 10:30:28 +01:00
Stefan Rueger
0592704798
Overwrite user's -c pgmid with matched id from programmer
Programmers are matched irrespective of case; hence, we are replacing the
user's command line string with the canonical version from avrdude.conf.
2023-06-23 09:44:51 +01:00
MCUdude
1350a22332 Fix typo 2023-06-22 17:40:27 +02:00
MCUdude
ba60323352 Use pmsg_info for RTS/DTR handshake info 2023-06-22 17:39:30 +02:00
Stefan Rueger
090b998160
Update ft2232h info 2023-06-22 08:34:55 +01:00
Stefan Rueger
43d1590ff5
Update arduino-ft232r description 2023-06-22 08:18:38 +01:00
Stefan Rueger
662c6f09a3
Update usbasp description 2023-06-22 08:06:23 +01:00
Stefan Rueger
8907750a3f
Update avrdude.conf.in 2023-06-21 23:48:19 +01:00
MCUdude
164ea88b40 Fix typo 2023-06-21 23:25:59 +02:00
MCUdude
78cbe7e6e0 Add -xrtsdtr extended parameter to jtag2updi programmer docs 2023-06-21 23:13:15 +02:00
MCUdude
2e02320910 Add -xrtsdtr extended parameter to jtag2updi programmer 2023-06-21 23:12:52 +02:00
Stefan Rueger
80e240b5df
Replace ldata(lfirst(pgm->id)) with pgmid where possible 2023-06-21 18:48:05 +01:00
Stefan Rueger
a961284090
Replace strcmp() == 0 with str_eq() 2023-06-21 18:11:45 +01:00
Stefan Rueger
a678814877
Rename -c arg to pgmid and make global 2023-06-21 18:02:19 +01:00
Stefan Rueger
fa9252a36c
Rename local var pgmid to pgmidcp 2023-06-21 17:49:47 +01:00
Stefan Rueger
1d35a94f86
Remove comment and URL for arduino-ft232r programmer 2023-06-21 16:18:20 +01:00
Stefan Rueger
9269102ba5
Small updates to some programmer comments and descriptions 2023-06-21 15:36:50 +01:00
Stefan Rueger
cd14991938
Update butterfly_mk info 2023-06-21 15:21:42 +01:00
Stefan Rueger
a33d6b9523
Update usbasp programmer info 2023-06-21 14:54:36 +01:00
Stefan Rueger
bdca9cec21
Update URLs for the ttl232r programmer 2023-06-21 14:41:45 +01:00
Stefan Rueger
aaeae9ca3a
Remove outdated web URLs for O-Link 2023-06-21 14:26:29 +01:00
Stefan Rueger
0c3ec68f57
Update ft2232h programmer info and URLs 2023-06-21 14:02:35 +01:00
Stefan Rueger
8b317371bc
Update URLs for 89isp programmer 2023-06-21 13:47:29 +01:00
Stefan Rueger
6dab2a5d68
Update alf programmer info and URL 2023-06-21 13:06:31 +01:00
Stefan Rueger
b6174dc81a
Update reference to AT90S4433 datasheet 2023-06-21 12:10:06 +01:00
Stefan Rueger
3a5933299d
Restore serial_recv_timeout on failure 2023-06-21 09:15:02 +01:00
Stefan Rueger
7f360a42d9
Increase timeout for emulated butterfly chip erase depending on part 2023-06-21 09:05:18 +01:00
Stefan Rueger
73b9570da7
Add min/max_write_delay to usersig memories of ATmega*[0-9]RF* parts 2023-06-20 15:52:42 +01:00
Stefan Rueger
d13c5e34fb
Put empty line above memory comment before memory for -p*/s 2023-06-20 15:46:29 +01:00
Stefan Rueger
6d5264d81a
Update comments before memory sections 2023-06-20 15:43:34 +01:00
Stefan Rueger
c7ed33c7fa
Update wd_erase (chip_erase_delay) for some parts 2023-06-20 14:14:41 +01:00
Stefan Rueger
ba490ddea2
Update wd_flash, wd_eeprom and wd_fuse for several parts 2023-06-20 14:09:22 +01:00
Stefan Rueger
478acd8376
Parent ATmega256RFR2 off ATmega128RFA1 2023-06-20 13:58:48 +01:00
stefanrueger
abaca0de94
Define usersig memory for ATmega*RF[AR]* parts
#####
    # Three separate flash pages
    #   - Offset 0x100 in signature row
    #   - Only programmable with JTAG or HVPP
    #   - Readable from an application
    #   - Cannot be read using ISP
    #   - Not erased by chip erase
    #
    memory "usersig"
        paged              = yes;
        size               = 768;
        page_size          = 256;
        num_pages          = 3;
        offset             = 0x100;
        mode               = 0x41;
        delay              = 50;
        blocksize          = 256;
        readsize           = 256;
    ;
2023-06-16 00:40:11 +01:00
stefanrueger
1459002d6b
Update NEWS 2023-06-16 00:08:11 +01:00
Stefan Rueger
07c5348ab4
Merge pull request #1405 from stefanrueger/pre-checks
Relax checks before executing the -T/-U operations
2023-06-16 00:06:01 +01:00
Stefan Rueger
58f1ba9eec
Merge pull request #1404 from stefanrueger/usersig
Implement bytewise cache for usersig
2023-06-16 00:04:19 +01:00
Stefan Rueger
886c511e12
Merge pull request #1403 from MCUdude/usb-warning
Mute missing USB device warning for lower verbosity levels
2023-06-16 00:04:01 +01:00
Stefan Rueger
763028feca
Merge pull request #1402 from stefanrueger/multiple-terminals
Run -t interactive terminals when it is their turn wrt -t/-T/-U options
2023-06-16 00:03:41 +01:00
Stefan Rueger
0228304a15
Merge pull request #1401 from stefanrueger/avrcache
Fix memory leak in avrcache.c
2023-06-16 00:03:15 +01:00
Stefan Rueger
d8b67f2b82
Merge pull request #1400 from stefanrueger/doc-author-list
Expand authorship of documentation
2023-06-16 00:03:01 +01:00
Stefan Rueger
9e92c3c297
Merge pull request #1399 from stefanrueger/document-terminal-comments
Document terminal comments
2023-06-16 00:02:47 +01:00
Stefan Rueger
e8e5bee18f
Merge pull request #1386 from stefanrueger/stk500v2
Fix stk500v2.c's write_byte() for old parts
2023-06-16 00:02:17 +01:00
MCUdude
10cc234e15 Use pmsg_notice2 instead of pmsg_warning 2023-06-15 19:44:32 +02:00
stefanrueger
38d1cf20b7
Fix interactive terminal naming 2023-06-15 16:47:02 +01:00
stefanrueger
14aba8ad65
Relax checks before executing the -T/-U operations
Now that terminal commands can create files, some of the checks before
executing the -T/-U operations need to be relaxed to avoid false errors.
The command below is perfectly fine, because the file to be read from in
the -U step will be created earlier.

$ rm -f /tmp/load.eep
$ avrdude -qq -cdryrun -pm328p \
  -T 'w ee 0 "avrdude"; save ee 0 8 /tmp/load.eep:h' \
  -U eeprom:w:/tmp/load.eep
2023-06-15 00:44:31 +01:00
stefanrueger
214ced7ce5
Document usersig cache 2023-06-14 23:27:10 +01:00
stefanrueger
96b6ff0c33
Implement bytewise cache for usersig needed in terminal 2023-06-14 23:12:28 +01:00
MCUdude
5078f35c9b Mute missing USB device warning for lower verbosity levels 2023-06-14 20:20:12 +02:00
Hans
106bb57a09
Fix typos
And clarify that it is the jtag2updi programmer that now supports -U EEPROM writes
2023-06-14 19:54:48 +02:00
Stefan Rueger
7d8f100878
Allow multiple -t interactive terminals on the command line
Think breakpoints for a series of memory operations. In this example

$ avrdude -t -U eeprom:r:dopp.eep:i -t -U eeprom:w:dopp.eep

the first -U makes a backup of the EEPROM that the second terminal can
then arbitrarily change because the second -U restores the EEPROM content.
2023-06-13 23:46:22 +01:00
Stefan Rueger
6861dd8067
Fix memory leak in avrcache.c 2023-06-13 22:39:30 +01:00
Stefan Rueger
486400d8af
Use full name for HEB and make author list alphabetical 2023-06-13 22:36:43 +01:00
Stefan Rueger
c2b9b95174
Expand authorship of documentation 2023-06-13 20:02:59 +01:00
Stefan Rueger
298c0e3154
Document terminal comments 2023-06-13 19:48:16 +01:00
Stefan Rueger
9a52cfb3d5
Parent AT90S4434 off from AT90S8535
Both share the same datasheet but the AT90S4434 has had no XML data-sheet,
so the programming paramters are likely correct.
2023-06-13 19:17:53 +01:00
Stefan Rueger
b296c82185
Update NEWS 2023-06-13 18:43:41 +01:00
Stefan Rueger
5c1bb41266
Merge pull request #1397 from stefanrueger/sub-shell
Provide subshell command `!` in the terminal
2023-06-13 18:36:39 +01:00
Stefan Rueger
8986145cbb
Merge pull request #1396 from stefanrueger/save
Provide terminal save command
2023-06-13 18:35:39 +01:00
Stefan Rueger
3c84f7328f
Invalidate cache in stk500v2_paged_write()
Bytewise access uses a cache, but paged access doesn't so must invalidate
the cache when writing a page - otherwise mixing bytewise and paged access
is bound to fail.
2023-06-13 18:19:31 +01:00
Stefan Rueger
4722417fe0
Set page size to 2 for STK500v2 programming of old parts
These (ATtiny15 et al) have bytewise-only flash access, but the STK500v2
protocol enforces word flash addresses, so need to r/w flash in pairs.
2023-06-13 18:16:37 +01:00
Stefan Rueger
2bd5fb8fe4
Clarify location of config files for Windows in documentation 2023-06-13 14:26:38 +01:00
Stefan Rueger
910e30061c
Clarify location of avrdude.rc in Windows 2023-06-13 14:24:17 +01:00
Stefan Rueger
b298d9e103
Return when save detects missing length for a memory segement 2023-06-13 12:13:16 +01:00
Stefan Rueger
6eb366574d
Update terminal subshell documentation 2023-06-13 10:43:23 +01:00
Stefan Rueger
db414259cf
Allow subshell commands to be remainder of terminal line
Now a subshell command can follow a terminal command on the same line:

avrdude> dump eeprom; !ls

Subshell commands still take up the remainder of the line

avrdude> !ls; dump eeprom

Will execute dump in the shell (not the terminal).
2023-06-13 10:36:25 +01:00
Stefan Rueger
27f49f64f2
Document terminal subshell command !<line> 2023-06-13 00:15:11 +01:00
Stefan Rueger
3d71c4c66b
Fix size setting on file read 2023-06-12 18:28:05 +01:00
Stefan Rueger
51275c36ef
Rename memtype to memory in documentation 2023-06-12 18:23:52 +01:00
Stefan Rueger
bea3d099f8
Add terminal save documentation 2023-06-12 18:21:13 +01:00
Stefan Rueger
64a4bb18bd
Provide subshell command ! in the terminal
Needs to have allow_subshells = yes; in ~/.avrduderc. Then subshell
commands can be executed, eg,

$ avrdude -t

avrdude> !ls
myapplication.hex    myapplication.eep

avrdude> !avrdude -pm328p/St | grep efuse.initval
.ptmm   ATmega328P      efuse   initval 0xff
2023-06-12 16:24:20 +01:00
Stefan Rueger
9cb93da3cf
Also set read_byte() to avr_read_byte_default() for old parts 2023-06-11 19:23:47 +01:00
Stefan Rueger
48f1fc75e9
Provide terminal save command
Examples with filename - (stdout):

$ avrdude -qqt -p m328p
avrdude> save eeprom -:i
:2000000054686973206973206120746573740048656C6C6F2C20776F726C64210A0054689C
:200020006520717569636B2062726F776E20666F78206A756D7073206F76657220746865DD
:20004000206C617A7920646F6700FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C
:20006000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7FEE7FEE7FEE7FEE7FE1D
:20008000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:2000A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:2000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:2000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:20010000280992D30B0000F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62
:20012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF
:20014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF
:20016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F
:20018000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F
:2001A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F
:2001C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F
:2001E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F
:20020000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
:20022000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE
:20024000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE
:20026000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E
:20028000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E
:2002A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E
:2002C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E
:2002E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E
:20030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD
:20032000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD
:20034000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD
:20036000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D
:20038000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D
:2003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D
:2003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D
:2003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D
:00000001FF
avrdude> save eeprom 15 5 22 5 -:I
:05000F0048656C6C6FF8                                       // 0000f> Hello
:020000040000FA
:05001600776F726C64BD                                       // 00016> world
:00000001FF
avrdude> save eeprom 15 5 22 5 -:h
0x48,0x65,0x6c,0x6c,0x6f
0x77,0x6f,0x72,0x6c,0x64
2023-06-11 18:15:36 +01:00
Stefan Rueger
20bd7f37bc
Suppress comma at begin of memory segment, not begin of memory 2023-06-11 15:54:53 +01:00
Stefan Rueger
99a25fcd16
Rename function segment_normalise() 2023-06-11 14:28:12 +01:00
Stefan Rueger
f0da9a6c44
Update NEWS 2023-06-11 11:59:20 +01:00
Stefan Rueger
6126dd3d6a
Merge pull request #1395 from stefanrueger/dryrun
Add more info for the dryrun programmer
2023-06-11 11:54:39 +01:00
Stefan Rueger
f966d0cc68
Merge pull request #1394 from stefanrueger/arduino
Add more info for the arduino programmer
2023-06-11 11:54:28 +01:00
Stefan Rueger
c78b0ac4c5
Merge pull request #1393 from stefanrueger/urclock
Add more documentation for urclock programmer
2023-06-11 11:54:18 +01:00
Stefan Rueger
45217c7c47
Merge pull request #1392 from stefanrueger/save
Rewrite fileio functions to cater for a list of memory segments
2023-06-11 11:52:49 +01:00
Stefan Rueger
16dd3ac998
Change AVRMEM * to const AVRMEM * where appropriate 2023-06-11 11:43:44 +01:00
Stefan Rueger
4ab9bda302
Change Segment_t * to const Segment_t * where appropriate 2023-06-11 11:40:13 +01:00
Stefan Rueger
4ee10ea8a7
Add more info for the dryrun programmer 2023-06-10 19:06:41 +01:00
Stefan Rueger
d6d40622d0
Update NEWS 2023-06-10 17:47:28 +01:00
Stefan Rueger
d57dfbcdbc
Merge pull request #1385 from stefanrueger/dryrun
Provide debug messages for the dryrun programmer
2023-06-10 17:44:52 +01:00
Stefan Rueger
d32d57f4ef
Merge pull request #1383 from stefanrueger/arduinoasisp
Provide programmer arduino_as_isp
2023-06-10 17:43:54 +01:00
Stefan Rueger
bdc1135c95
Add more info for the arduino programmer 2023-06-10 16:53:07 +01:00
Stefan Rueger
ef86212030
Add avrdude.conf urclock comment that it resets the board 2023-06-10 16:46:21 +01:00
Stefan Rueger
0de04abcf5
Add more info for urclock programmer 2023-06-10 16:25:30 +01:00
Stefan Rueger
100ad9004f
Add example for -p .../s and -c .../s in main's help text 2023-06-10 16:24:22 +01:00
Stefan Rueger
dbbed4d115
Update immediate file input function 2023-06-10 13:37:59 +01:00
Stefan Rueger
6215aa3c8b
Add credentials for partial rewrite 2023-06-10 13:12:53 +01:00
Stefan Rueger
99ac48f106
Add R-base numbers 2023-06-10 13:10:15 +01:00
Stefan Rueger
cfddd43ef8
Update bin/oct/dec/hex file I/O functions 2023-06-10 12:54:10 +01:00
Stefan Rueger
19de7e8892
Adapt ELF I/O functions to adhere to fileio segments
... but continue to ignore the memory segment the ELF file should
be read into (as before)
2023-06-10 11:11:49 +01:00
Stefan Rueger
274c771ccf
Rewrite raw binary I/O functions 2023-06-10 11:05:08 +01:00
Stefan Rueger
e20f09631e
Make fileio_setparms() static 2023-06-10 11:02:39 +01:00
Stefan Rueger
361d910d83
Remove Nfgets() in favour of str_fgets() 2023-06-10 11:01:05 +01:00
Stefan Rueger
09d67c514e
Rewrite Motorola S-Record I/O functions 2023-06-10 10:53:46 +01:00
Stefan Rueger
2860becc3e
Rewrite Intel Hex file I/O functions 2023-06-10 10:49:34 +01:00
Stefan Rueger
3a6d09c633
Remove unnecessary static forward declarations 2023-06-10 10:45:27 +01:00
Stefan Rueger
165c319a1c
Provide int fileio_segments() function interface
This function can handle a list of memory segments for file I/O
2023-06-10 10:40:53 +01:00
Stefan Rueger
2b89a3b698
Clarify ihexrec is common to ihex and srec format 2023-06-10 10:34:04 +01:00
Stefan Rueger
dc8268cc34
Provide str_fgets()
Reads a potentially long line and returns it in a malloc'd buffer.
2023-06-10 10:29:02 +01:00
Jeff Kent
ca1f270329 avrftdi jtag: swap enable and initialize functions 2023-06-06 22:03:30 -05:00
Jeff Kent
4cf8f296cc make avrftdi_display output not show other interface pins 2023-06-06 22:03:30 -05:00
Jeff Kent
366467b750 add ft232h_jtag and ft2232h_jtag programmer conf
* add link to TUMPA manual
* clean up TUMPA programmer confs
2023-06-06 22:03:30 -05:00
Jeff Kent
ada5f3bd5b add tumpa-b configuration for convenience 2023-06-06 22:03:30 -05:00
Jeff Kent
ecd416917d add FTDI MPSSE jtag support 2023-06-06 22:03:30 -05:00
Jeff Kent
35cd1d0b4f add pindefs for JTAG 2023-06-06 22:03:30 -05:00
Stefan Rueger
9267f9435d
Provide programmer arduino_as_isp 2023-06-06 14:53:01 +01:00
Stefan Rueger
4d0914c872
Set stk500v2.c's ISP write_byte() to avr_write_byte_default() for old parts 2023-06-06 14:42:54 +01:00
Stefan Rueger
0044688f73 Add dryrun_..._led() functions to dryrun programmer 2023-06-06 13:42:21 +01:00
Stefan Rueger
eb312ce2e6
Add debug messages for some dryrun_...() return values 2023-06-06 13:29:01 +01:00
Stefan Rueger
9e53968afd
Show -c programmer name for dryrun_display() 2023-06-06 12:40:34 +01:00
Stefan Rueger
e17b667523
Add debug messages for dryrun programmer 2023-06-06 10:28:05 +01:00
Stefan Rueger
ca6cf7f8c5
Use str_eq() instead of strcmp() == 0 2023-06-05 15:19:32 +01:00
Stefan Rueger
b4a4f7df5b
Update NEWS 2023-06-04 22:10:42 +01:00
Stefan Rueger
8c2b326c00
Merge pull request #1378 from stefanrueger/config
Write fuse only when terminal config needs value to change
2023-06-04 22:06:33 +01:00
Stefan Rueger
8947683dbf
Merge pull request #1376 from stefanrueger/page_erase
Remove pgm->page_erase() function when unable to erase page
2023-06-04 22:06:21 +01:00
Stefan Rueger
536c84ca2e
Merge pull request #1375 from stefanrueger/cache
Prevent terminal write error in r/o region when memory unchanged
2023-06-04 22:06:04 +01:00
Stefan Rueger
19b4029eea
Merge pull request #1373 from stefanrueger/terminal
Implement -T cmd to mix terminal commands with -U commands
2023-06-04 22:05:48 +01:00
Stefan Rueger
f3d7c01a1e
Write fuse only when terminal config needs value to change 2023-06-03 16:51:26 +01:00
Stefan Rueger
a694217603
Print all -U/-T arguments as headline when processing them 2023-06-02 21:23:25 +01:00
Stefan Rueger
f1e014fc1e
Unset pgm->page_erase() if part/programmer cannot erase a page 2023-06-01 22:11:27 +01:00
Stefan Rueger
f4da6de064
Unset pgm->page_erase() if part/programmer cannot erase a page 2023-06-01 22:05:53 +01:00
Stefan Rueger
5f99110d4a
Set page_erase() to NULL when a programmer cannot erase page 2023-06-01 21:46:26 +01:00
Stefan Rueger
24f845cdd8
Guard pgm->page_erase() from being called when unset 2023-06-01 21:46:09 +01:00
Stefan Rueger
161eb064ae
Move cache flush/reset from -T/U parsing to -U/T execution
What happens is the same, just the code is crisper and clearer.
2023-06-01 21:24:52 +01:00
Stefan Rueger
784c83d23a
Prevent terminal write error in r/o region when memory unchanged 2023-06-01 21:18:55 +01:00
Stefan Rueger
b41d14a8c9
Move terminal_...() functions into libavrdude.h 2023-06-01 01:07:43 +01:00
Stefan Rueger
eee5aca79f
Provide an example for intermixing -T and -U options 2023-06-01 01:04:54 +01:00
Stefan Rueger
fa9370d570
Insert a paragraph for each -T/-U option in AVRDUDE's output 2023-06-01 01:03:21 +01:00
Stefan Rueger
e0e7bd7ff5
Document -T cmd option 2023-06-01 00:20:33 +01:00
Stefan Rueger
4a7d140b08
Move update_...() printing convenience functions to strutil.c and rename to str_...() 2023-05-31 22:50:27 +01:00
Stefan Rueger
bdbe13e1f6
Make arguments of update.c functions const if possible 2023-05-31 22:40:34 +01:00
Stefan Rueger
1126ff1621
Implement -T cmdline to mix terminal commands with -U commands 2023-05-31 22:23:23 +01:00
Stefan Rueger
98c460268e
Provide terminal_line() to process a single terminal command line 2023-05-31 18:16:34 +01:00
Stefan Rueger
3db6863cd3
Move fill mode enum from term.h to term.c 2023-05-31 18:08:43 +01:00
Stefan Rueger
a53b2eef19
Make local functions static 2023-05-31 17:52:30 +01:00
Stefan Rueger
ffaefbf6ec
Make AVRMEM * variables const 2023-05-31 17:42:11 +01:00
Stefan Rueger
334315270f
Make PROGRAMMER * and AVRPART * arguments const 2023-05-31 17:40:08 +01:00
Stefan Rueger
3ea05c4d33
Update NEWS 2023-05-31 17:03:00 +01:00
Stefan Rueger
dd8aefec85
Merge pull request #1372 from stefanrueger/bitmask
Initialise unused bits of classic-part fuses with factory defaults
2023-05-31 16:51:21 +01:00
Stefan Rueger
6defcb450d
Shrink avrdude.conf using memory inheritance for initval and bitmask
Also ensures initval and bitmask remains unset for
 - AT43USB320, AT43USB355
 - AT76C711
 - AT86RF401
 - AT89S51, AT89S52
 - AT90C8534
 - AT94K
 - ATtiny3214
 - ATxmega128A4, ATxmega192A1, ATxmega256A1, ATxmega64A4
 - AVR8EA28, AVR8EA32
 - LGT8F168P, LGT8F328P, LGT8F88P
 - M3000
2023-05-31 16:38:24 +01:00
Stefan Rueger
5ae2f3ff05
Perform wildcard match for avrdude.conf parameter injection 2023-05-31 16:36:30 +01:00
Stefan Rueger
26239ead25
Initialise unused bits when writing XMEGA fuses/lock bits 2023-05-31 10:56:25 +01:00
Stefan Rueger
7fadbbdd63
Initialise unused bits of classic part fuses/lock bits with factory defaults 2023-05-29 16:51:54 +01:00
Stefan Rueger
9441af8b90
Test for verbose > 0 instead of !!verbose 2023-05-29 16:41:14 +01:00
Stefan Rueger
19d1e03bec
Read-modify-write classic part fuses/lock bits with unused bits in dryrun.c 2023-05-29 16:32:19 +01:00
Stefan Rueger
30ac1826bc
Use bitmasks for terminal write verification 2023-05-29 14:33:00 +01:00
Stefan Rueger
f311a04d47
Extend -U verification with bitmasks to TPI, PDI and UPDI parts 2023-05-29 14:32:39 +01:00
Stefan Rueger
918e71de90
Make bitmask 0xff default (shortening avrdude.conf) 2023-05-29 14:24:04 +01:00
Stefan Rueger
ff5a178ca2
Document default value of bitmask 2023-05-29 14:00:06 +01:00
Stefan Rueger
8f1eb4aef6
Update avr.c to use str_eq() and str_starts() functions 2023-05-29 13:48:07 +01:00
Stefan Rueger
bbe2f51f58
Fix ATmega161's sut, spien and bootrst bit masks 2023-05-28 18:12:49 +01:00
Stefan Rueger
0f1f526f53
Fix several SPI fuse/lock read/write commands
- AT90S2323	fuse	read
  - AT90S2323	lock	read
  - AT90S2343	fuse	read
  - AT90S2343	lock	read
  - AT90S4434	fuse	read
  - AT90S4434	fuse	write
  - AT90S4434	lock	read
  - AT90S8535	fuse	read
  - AT90S8535	lock	read
  - ATmega161	fuse	write
  - ATmega162	efuse	write
  - ATmega324PB	efuse	write
  - ATtiny22	fuse	read
  - ATtiny22	lock	read
  - ATtiny828	efuse	write
  - ATtiny828R	efuse	write
2023-05-28 17:59:05 +01:00
Stefan Rueger
50e96aea5b
Initialise bitmask in avrdude.conf from .atdf files 2023-05-27 19:37:45 +01:00
Stefan Rueger
0406159694
Add bitmask for fuses and lock bits to memory description/grammar 2023-05-27 19:36:33 +01:00
Stefan Rueger
3423309449
Update NEWS 2023-05-27 17:15:19 +01:00
Stefan Rueger
8f98731fc9
Update variants for AVR...EA parts 2023-05-27 17:07:51 +01:00
Stefan Rueger
7be7b23352
Merge pull request #1365 from stefanrueger/config
Provide terminal config command to set fuses and lock bits
2023-05-27 16:40:59 +01:00
Stefan Rueger
45e94de70f
Consolidate shell examples in documentation 2023-05-27 16:36:09 +01:00
Stefan Rueger
598b693f7e
Merge branch 'main' into config 2023-05-27 14:21:28 +01:00
Stefan Rueger
d6bb233468
Merge pull request #1364 from MCUdude/cli-examples
Add more Avrdude CLI usage examples
2023-05-27 14:15:22 +01:00
Stefan Rueger
02b27ab52c
Merge pull request #1363 from KantBe/main
Adds configuration for Kanda's AVRISP-U programmer.
2023-05-27 14:14:09 +01:00
Stefan Rueger
31711878bd
Update documentation for terminal config 2023-05-27 01:22:11 +01:00
Stefan Rueger
df9a85655e
Add AVR16EA... and AVR32EA... parts for terminal config 2023-05-26 19:36:49 +01:00
Stefan Rueger
a41f05c802
Indicate factory setting in terminal config error msgs if relevant 2023-05-26 19:34:23 +01:00
Stefan Rueger
3e845bf45e
Revise alignment of terminal config output
Alignment happens for groups of different values of the same configuration
property, but only when the value lables differ in length by max of 10
characters. For example:

avrdude> c su=int*
avrdude warning: (config) ambiguous; known sut_cksel int* symbols are:
 - sut_cksel=intrcosc_8mhz_6ck_14ck_0ms    #  2
 - sut_cksel=intrcosc_128khz_6ck_14ck_0ms  #  3
 - sut_cksel=intrcosc_8mhz_6ck_14ck_4ms1   # 18
 - sut_cksel=intrcosc_128khz_6ck_14ck_4ms1 # 19
 - sut_cksel=intrcosc_8mhz_6ck_14ck_65ms   # 34
 - sut_cksel=intrcosc_128khz_6ck_14ck_65ms # 35
2023-05-26 01:40:56 +01:00
Stefan Rueger
e529fea40f
Fix crcsel explanatory name in terminal config 2023-05-25 21:20:30 +01:00
Stefan Rueger
31f7781387
Align configuration properties in terminal config 2023-05-25 17:59:59 +01:00
Stefan Rueger
3545f22557
Rename some configuration properties for terminal config
... to make them more mnemonic

  active   => bodactive
  sleep    => bodsleep
  lvl      => bodlevel
  sampfreq => bodsampfreq
  period   => wdtperiod
  window   => wdtwindow
2023-05-25 17:55:54 +01:00
MCUdude
9080dd201e Fix terminal examples page formatting 2023-05-24 23:57:01 +02:00
MCUdude
afad3117b9 Hopefully fix page formatting 2023-05-24 18:39:14 +02:00
MCUdude
1cd894d934 Fix typo 2023-05-24 18:34:06 +02:00
MCUdude
78e9a8b997 Add missing backslashes 2023-05-24 18:33:31 +02:00
Stefan Rueger
f8d92be300
Silence overzealous compiler warning 2023-05-24 14:02:29 +01:00
Stefan Rueger
2f6bd01a7d
Fix uninitialised variable warning 2023-05-24 13:51:26 +01:00
MCUdude
1f137b3d0d Mention error messages, warnings and progress reports 2023-05-23 23:35:26 +02:00
MCUdude
eaf0d89c6a Add flash strings example 2023-05-23 23:32:28 +02:00
MCUdude
5a668ae566 Improve formatting 2023-05-23 23:20:21 +02:00
MCUdude
c307b468bd Add elf write example 2023-05-23 20:07:54 +02:00
Quentin Berling
bbd85cdb7b Fix formatting with avrdude -cavrisp-u/s 2023-05-23 08:12:49 +02:00
Stefan Rueger
784eda6ff3
Provide terminal config command to set fuses and lock bits
Example:

$ avrdude -c dryrun -p AVR32DA32 -t
avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e9533 (probably avr32da32)

avrdude> c
config period=t_off # 0
config window=t_off # 0
config sleep=bod_disabled # 0
config active=bod_disabled # 0
config sampfreq=sf_128hz # 0
config lvl=bod_1v9 # 0
config clksel=oschf # 0
config eesave=eex_erased # 0
config rstpincfg=gpio # 0
config crcsel=crc16 # 0
config crcsrc=nocrc # 0b11 = 3
config sut=sut_0ms # 0
config codesize=0 # 0
config bootsize=0 # 0
config key=nolock # 0x5cc5c55c

avrdude> c active= -vv
config active=bod_disabled # 0 (brownout detection disabled)

avrdude> c sleep=3
avrdude warning: (config) assigning a reserved value (0x03) to sleep, check data sheet

avrdude> c -v sleep=
config sleep=0b11 # reserved = 3

avrdude> c sleep=bod_cont

avrdude> c -?
Syntax: config {<opts> | <property>[=<value>]}
Function: Show or change configuration properties of the part
Options:
    -f show value of fuse and lock bit memories as well
    -a output an initialisation script with all possible assignments
    -v increase verbosity, show explanations alongside output
    -h show this help message

Config alone shows all property names and current settings of the part's
hardware configuration in terms of symbolic mnemonics or values. Use

avrdude> config <property>

to show that of <property>. Wildcards or initial strings are permitted (but
not both), in which case all settings of matching properties are displayed.

avrdude> config <property>=

shows all possible values that <property> can take on with the currently
set one being the only that is not commented out. Assignments

avrdude> config <property>=<value>

modify the corresponding fuse or lock bits immediately but will normally only
take effect the next time the part is reset (see the data sheet). Value can
be a valid integer or one of the symbolic mnemonics, if known. Wildcards or
initial strings are permitted for the mnemonic, but an assignment only
happens if both the property and the name can be uniquely resolved.

It is quite possible, as is with direct writing to the underlying fuse and
lock bits, to brick a part, i.e., make it unresponsive to further programming
with the chosen programmer: here be dragons.
2023-05-22 23:18:26 +01:00
MCUdude
18baa1b646 Add Urboot/Urclock metadata example 2023-05-22 22:33:45 +02:00
Stefan Rueger
db9884361c
Update avrintel.[ch] 2023-05-22 21:16:34 +01:00
MCUdude
4738c099b7 Add Digilent JTAG HS2 prog_modes + fix typo in desc 2023-05-22 21:57:44 +02:00
MCUdude
75db0e950f Add more usage examples 2023-05-22 21:56:01 +02:00
MCUdude
12951a0f4a Avrdude terminal now supports binary numbers 2023-05-22 18:55:12 +02:00
Quentin Berling
2799aa0bf8 Adds configuration for Kanda's AVRISP-U programmer. 2023-05-22 13:10:34 +02:00
Stefan Rueger
5ca48353c7
Add str_match() to str_util.c 2023-05-22 00:11:37 +01:00
MCUdude
3b40252c6c Add more CLI examples 2023-05-21 22:13:24 +02:00
Stefan Rueger
42d14cc195
Move itoa() implementation to str_util.c 2023-05-21 14:56:00 +01:00
Stefan Rueger
180b730d71
Make dryrun work regardless of programming modes 2023-05-21 11:49:30 +01:00
Stefan Rueger
ded200cae9
Add string upper/lowercase conversions to str_util.c 2023-05-20 21:35:58 +01:00
Stefan Rueger
0f6037a0fa
Update avrintel.[ch] with configuration information
... whilst moving functions that locate a part in uP_table[] from
urclock.c to avrintel.c
2023-05-20 21:33:17 +01:00
Stefan Rueger
781595fe68
Fix some initial values of fuses/lock bits 2023-05-20 21:29:31 +01:00
Stefan Rueger
07bda5e913
Update NEWS 2023-05-20 21:16:12 +01:00
Stefan Rueger
9e9eb56cfd
Merge pull request #1360 from stefanrueger/atxmega-A4U
Add fuse0 to ATxmega128A4U/64A4U/32A4U/16A4U
2023-05-20 20:45:22 +01:00
Stefan Rueger
dffeb4cf21
Merge pull request #1358 from stefanrueger/strutil
Extend <data> notion to files in terminal write
2023-05-20 20:44:07 +01:00
Stefan Rueger
d160b17f4c
Mention XMEGA B also have fuse0 2023-05-20 12:53:01 +01:00
Stefan Rueger
34421a1da7
Add fuse0 to ATxmega128A4U/64A4U/32A4U/16A4U
See page 29 of Atmel's 8077I–AVR–11/2012 XMEGA A MANUAL
https://ww1.microchip.com/downloads/en/DeviceDoc/doc8077.pdf
2023-05-20 01:17:28 +01:00
Stefan Rueger
234aebd1dd
Document reading from file with format :b, :o, :d and :h 2023-05-19 20:27:15 +01:00
Stefan Rueger
3815079c91
Auto detect :b, :o, :d and :h file formats 2023-05-19 20:18:53 +01:00
Stefan Rueger
1e07529b9b
Document 0b binary integers and files for terminal write command 2023-05-19 17:51:23 +01:00
Stefan Rueger
e3ceb5e891
Update documentation of memory types for modern AVR parts 2023-05-19 16:12:27 +01:00
Stefan Rueger
5a8c051a22
Move file format conversions into one place 2023-05-19 15:28:56 +01:00
Stefan Rueger
8683476417
Enable :b :o :d and :h mode to be read from file
In fact not only lists of 0b-binary, octal, decimal and 0x-hex bytes can
be read, but also combinations of them, float numners and strings (just
like in terminal write). The immediate mode :m now can also read
terminal-type data (just be careful with preseving the quotes in the
shell through a double layer of quoting).

avrdude -U "eeprom:w:42.0,0b101010,42,0x2a,052,'*':m"
2023-05-18 18:06:12 +01:00
Stefan Rueger
d9e20708c1
Fix error in -U parsing 2023-05-18 00:22:05 +01:00
Stefan Rueger
fdedba8485
Simplify -U parsing so that more filenames with colons pass 2023-05-17 23:36:06 +01:00
Stefan Rueger
f119c0c29d
Silence overzealous compiler warnings 2023-05-17 23:35:29 +01:00
Stefan Rueger
c4f48c94fe
Spell out function of varef terminal command 2023-05-17 01:26:35 +01:00
Stefan Rueger
6111dc12d8
Note the file format instead of repeated pathname in terminal write errors 2023-05-17 01:16:47 +01:00
Stefan Rueger
62023e2a3b
Review and update terminal help messages 2023-05-16 21:43:45 +01:00
Stefan Rueger
5cf5924f6c
Update and shorten terminal help messages 2023-05-15 18:24:50 +01:00
Stefan Rueger
464d18729e
Allow successive terminal commands in one line separated by ;
This makes it easier to pass multi-line commands from a single bash line:

$ echo "d ee 0 16; d ee -16 -1" | avrdude -qqt
avrdude> d ee 0 16; d ee -16 -1
0000  48 65 6c 6c 6f 2c 20 77  6f 72 6c 64 21 00 ff ff  |Hello, world!...|
03f0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
2023-05-15 17:52:18 +01:00
Stefan Rueger
e7fb2e2b34
Allow inline # comments for terminal commands 2023-05-15 17:09:10 +01:00
Stefan Rueger
a1bbbe904c
Simplify tokenize() 2023-05-15 17:05:08 +01:00
Stefan Rueger
a40b9db5a4
Rewrite nexttok() to allow escaped spaces in non-string arguments
Useful for file names

```
$ echo "Hello, world!" >'Q:\Projects\Eurovision Song Contest\light show.eep'
$ avrdude -qqt
avrdude> erase eeprom 0 16
avrdude> # Escape spaces in filenames with a backslash:
avrdude> write eeprom Q:\Projects\Eurovision\ Song\ Contest\light\ show.eep:r
avrdude> dump eeprom 0 16
0000  48 65 6c 6c 6f 2c 20 77  6f 72 6c 64 21 0a ff ff  |Hello, world! ..|
```
2023-05-15 16:49:08 +01:00
Stefan Rueger
88d4d712df
Extend <data> notion in terminal write to files
$ echo "The quick brown fox jumps over the lazy dog" >fox

$ avrdude -qqt
avrdude> w
Usage: write <memory> <addr> <data>[,] {<data>[,]}
       write <memory> <addr> <len> <data>[,] {<data>[,]} ...
       write <memory> <datum> # only for 1-byte memories
       write <memory> <file>  # only for memories with more than 1 byte

Ellipsis ... writes <len> bytes padded by repeating the last <data> item.

Both the <addr> and <len> can be negative numbers; a negative <addr> starts
an interval from that many bytes below the memory size; a negative <len> ends
the interval at that many bytes below the memory size.

<data> can be binary, octal, decimal or hexadecimal integers, floating point
numbers or C-style strings and characters. If nothing matches, <data> will be
interpreted as a file name containing data. In absence of a :<f> format
suffix, the terminal will try to auto-detect the file format.
[...]

avrdude> write eeprom 0 80 0xff ...

avrdude> write eeprom fox
avrdude error: (write) data fox: cannot determine format for file fox, specify explicitly

avrdude> write eeprom fox:r

avrdude> read eeprom 0 80
0000  54 68 65 20 71 75 69 63  6b 20 62 72 6f 77 6e 20  |The quick brown |
0010  66 6f 78 20 6a 75 6d 70  73 20 6f 76 65 72 20 74  |fox jumps over t|
0020  68 65 20 6c 61 7a 79 20  64 6f 67 0a ff ff ff ff  |he lazy dog ....|
0030  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
0040  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

avrdude> write eeprom 0b10000 fox:r

avrdude> read eeprom 0 80
0000  54 68 65 20 71 75 69 63  6b 20 62 72 6f 77 6e 20  |The quick brown |
0010  54 68 65 20 71 75 69 63  6b 20 62 72 6f 77 6e 20  |The quick brown |
0020  66 6f 78 20 6a 75 6d 70  73 20 6f 76 65 72 20 74  |fox jumps over t|
0030  68 65 20 6c 61 7a 79 20  64 6f 67 0a ff ff ff ff  |he lazy dog ....|
0040  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

avrdude> write eeprom 0 80 0xff ...

avrdude> write eeprom 0 "Hello, world" 1 2 3 fox:r

avrdude> read eeprom 0 80
0000  48 65 6c 6c 6f 2c 20 77  6f 72 6c 64 00 01 02 03  |Hello, world....|
0010  54 68 65 20 71 75 69 63  6b 20 62 72 6f 77 6e 20  |The quick brown |
0020  66 6f 78 20 6a 75 6d 70  73 20 6f 76 65 72 20 74  |fox jumps over t|
0030  68 65 20 6c 61 7a 79 20  64 6f 67 0a ff ff ff ff  |he lazy dog ....|
0040  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

avrdude> write eeprom 0 77 "Hello, world" 1 2 3 fox:r ...

avrdude> read eeprom 0 80
0000  48 65 6c 6c 6f 2c 20 77  6f 72 6c 64 00 01 02 03  |Hello, world....|
0010  54 68 65 20 71 75 69 63  6b 20 62 72 6f 77 6e 20  |The quick brown |
0020  66 6f 78 20 6a 75 6d 70  73 20 6f 76 65 72 20 74  |fox jumps over t|
0030  68 65 20 6c 61 7a 79 20  64 6f 67 0a 54 68 65 20  |he lazy dog The |
0040  71 75 69 63 6b 20 62 72  6f 77 6e 20 66 ff ff ff  |quick brown f...|
2023-05-14 20:12:32 +01:00
Stefan Rueger
4b62480e85
Use str_int() for main option parsing 2023-05-14 13:46:01 +01:00
Stefan Rueger
21521c23c6
Use str_int() for reset pin in linuxspi port string 2023-05-14 13:33:18 +01:00
Stefan Rueger
1edc42cf3e
Use str_int() for general urclock option parsing 2023-05-14 13:24:45 +01:00
Stefan Rueger
1520422639
Use str_int() for urclockID parsing 2023-05-14 13:19:28 +01:00
Stefan Rueger
cf963702d4
Fix big endian treatment 2023-05-14 12:58:11 +01:00
Stefan Rueger
4eee8ab7be
Add default_bitclock to avrdude -c*/s -p*/s output 2023-05-14 02:55:09 +01:00
Stefan Rueger
a7ae555f71
Use str_int() for avrdude.conf integers 2023-05-14 02:54:50 +01:00
Stefan Rueger
9628a820c8
Use str_int() for <data> in -U <mem>:w:<data>:m immediate updates 2023-05-14 01:11:41 +01:00
Stefan Rueger
5603bef0d7
Use str_int() for avrdude.conf address bit number aN 2023-05-14 00:54:21 +01:00
Stefan Rueger
9dc08857a8
Change error message for missing data on terminal write 2023-05-14 00:37:12 +01:00
Stefan Rueger
96fea11257
Use str_int() in terminal read 2023-05-13 23:29:33 +01:00
Stefan Rueger
7589246a40
Use str_int() in terminal write 2023-05-13 23:28:34 +01:00
Stefan Rueger
1091f1d421
Use str_int() in terminal send 2023-05-13 23:27:28 +01:00
Stefan Rueger
efbc69aaf8
Use str_int() in terminal pgerase 2023-05-13 23:25:55 +01:00
Stefan Rueger
fb42518f6b
Use str_int() in terminal varef 2023-05-13 23:24:25 +01:00
Stefan Rueger
6accc3baae
Use str_int in terminal verbose 2023-05-13 23:22:24 +01:00
Stefan Rueger
5acf5c6aaf
Use str_int() in terminal quell 2023-05-13 23:21:11 +01:00
Stefan Rueger
63f818f53f
Hide Easter egg 2023-05-13 23:16:21 +01:00
Stefan Rueger
e3bc41a5cd
Add str_int() conversion that conforms to avrdude terminal syntax
This has a similar but slightly different calling interface to strtoull()
and conforms to the way that terminal write interprets data items, ie,
recognises binary numbers as well as optional size suffixes LL/L/S/H/HH,
optional unsigned U suffix. It also takes C character constants, eg, '\n',
as numbers and ignores an optional trailing comma. Usage example:

 #include "libavrdude.h"

const char *errptr;
int addr = str_int(string, STR_INT32, &errptr);
if(errptr) {
  pmsg_error("address %s: %s\n", string, errptr);
  return -1;
}
2023-05-13 23:10:15 +01:00
Stefan Rueger
bb95a83277
Add str_todata() and use it for terminal write data items
This makes available as a function the way that terminal write interprets
write data and converts them into bits and bytes. Also adds binary numbers
using the 0b prefix.
2023-05-13 13:09:26 +01:00
Stefan Rueger
e6a2f3c058
Update NEWS 2023-05-04 19:26:07 +01:00
Stefan Rueger
9c41c23923
Merge pull request #1357 from stefanrueger/metadata
Progressively shrink metadata for -c urclock
2023-05-04 19:21:00 +01:00
Stefan Rueger
b812d9e087
Merge pull request #1351 from stefanrueger/option-n
Document -n behaviour wrt -U and terminal
2023-05-04 19:20:08 +01:00
drmpjz
b8344734d1
Add option -f to build.sh (#1342) 2023-05-04 19:18:17 +01:00
Stefan Rueger
e4cef21030
Ensure pmsg_xyz() messages always start on a new line 2023-05-03 10:54:39 +01:00
Stefan Rueger
a894dbb908
Progressively shrink metadata for -c urclock 2023-05-03 00:19:52 +01:00
Stefan Rueger
532387c5a2
Update documentation for -n, -V and -x help 2023-05-01 18:48:30 +01:00
Stefan Rueger
2fbe057b57
Document -n behaviour wrt -U and terminal 2023-04-24 11:20:16 +01:00
Stefan Rueger
bda26d3984
Remove unnecessary variable 2023-04-24 10:42:10 +01:00
Stefan Rueger
c279ab8639
Update NEWS 2023-04-23 23:02:49 +01:00
Stefan Rueger
9c4f295ffd
Merge pull request #1348 from stefanrueger/variants
Add variants of obsolete parts
2023-04-23 22:49:35 +01:00
Stefan Rueger
88c4a6fd5f
Merge pull request #1347 from stefanrueger/dryrun
Provide a programmer dryrun that emulates programming
2023-04-23 22:49:21 +01:00
Stefan Rueger
509c5c2932
Merge pull request #1346 from stefanrueger/strutil
Add case-insensitive string comparison and wildcard match to str_*() ...
2023-04-23 22:48:51 +01:00
Stefan Rueger
b4fa1bf8c2
Merge pull request #1345 from MCUdude/more-extra-parameters
Add `-xvtarg`, `-xvaref` and `-xfosc` extended parameters
2023-04-23 22:48:21 +01:00
MCUdude
46b44a9fe1 Fix grammar 2023-04-23 21:47:57 +02:00
Stefan Rueger
a00f000fc0
Add variants for ATxmega192A1/256A1
... from datasheet https://docs.rs-online.com/908d/0900766b81596516.pdf
2023-04-23 13:45:19 +01:00
MCUdude
cb96dc39b6 Update avrdude.texi 2023-04-23 11:56:22 +02:00
MCUdude
7c4d5fa9d1 Add missing -xhelp 2023-04-23 11:53:59 +02:00
Stefan Rueger
00c30532af
Add variants of obsolete parts 2023-04-22 18:39:33 +01:00
Stefan Rueger
2ebed6e84e
Link up fuses and fuse0 ... fuse9 memories for dryrun programmer
When fuseX is written to that fuses is also changed and vice versa.
2023-04-22 18:23:40 +01:00
MCUdude
765d63ddec Update avrdude.1 2023-04-21 23:44:24 +02:00
MCUdude
ba64553620 Add missing .El 2023-04-21 21:07:35 +02:00
MCUdude
0e7702b03a Initialize sscanf_success to zero 2023-04-21 19:54:16 +02:00
MCUdude
7a1c245b1a Revert strcmp->str_eq replacement
I screwed up here and didn't realize the importance of the negative return value here
2023-04-21 14:06:33 +02:00
MCUdude
b0ca8b6d75 Fix comment that didn't line up with the others 2023-04-21 14:03:33 +02:00
Stefan Rueger
fcefa90c62
Review and improve comments in strutil.c 2023-04-21 12:38:45 +01:00
MCUdude
d980e58c7a replace strcmp with str_eq 2023-04-21 12:30:37 +02:00
MCUdude
28870323e3 Always initialize f_get 2023-04-21 12:30:27 +02:00
Stefan Rueger
0796820625
Emulate flash NOR-memory for paged write 2023-04-21 01:58:13 +01:00
Stefan Rueger
d764d1b636
Provide a programmer dryrun that emulates programming
There is no connection to a physical programmer or chip needed; this to
test the workings of AVRDUDE and/or check out factory settings of fuses:

$ avrdude -qqp m328p -c dryrun -U lfuse:r:-:h
0x62

$ avrdude -qqp m328p -c dryrun -t
avrdude> read flash 0 32
0000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
0010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
avrdude> read hfuse
0000  d9                                                |.               |
avrdude> read signature
0000  1e 95 0f                                          |...             |
avrdude> read calibration
0000  55                                                |U               |
avrdude> write cal 0 0x56
avrdude error: cannot write to write-protected memory ATmega328P calibration
avrdude error: (write) error writing 0x56 at 0x00000, rc=-1
                write operation not supported on memory type calibration
2023-04-21 01:31:40 +01:00
Stefan Rueger
67a51eac64
Add case-insensitive string comparison and wildcard match to str_*() routines
... and apply new str_*() functions in urclock.c and developer_opts.c
2023-04-20 19:18:46 +01:00
Stefan Rueger
b038bd45dc
Update NEWS 2023-04-20 18:28:20 +01:00
Stefan Rueger
545df084b5
Merge pull request #1343 from stefanrueger/avrdude.conf
Review avrdude.conf, add variants and reconcile with ATDFs
2023-04-20 18:24:52 +01:00
Stefan Rueger
6d40f95644
Document avrdude.conf's variants string list and -vp? 2023-04-20 17:35:17 +01:00
Stefan Rueger
860ebd711b
Refine variants for some parts 2023-04-20 17:34:23 +01:00
Stefan Rueger
619ec2c3a4
Print variants = NULL for -p.../S when needed 2023-04-20 17:33:25 +01:00
Stefan Rueger
26e5a9316b
Treat variants as an additive string list and provide '= NULL' assignment 2023-04-19 21:39:27 +01:00
Stefan Rueger
5cedfd713d
Add part variants from vendor list and change display style 2023-04-19 21:38:15 +01:00
MCUdude
0e0124ceec Add -xvtarg, -xvaref and -xfosc to -xhelp 2023-04-19 22:10:54 +02:00
MCUdude
fe7f8298f5 Add -xfosc 2023-04-19 21:21:51 +02:00
MCUdude
caa779cb8a Add extra_features to native stk500v2 2023-04-19 21:07:27 +02:00
MCUdude
0e426cc34a Add -xvaref support
This makes it possible to adjust the analog reference voltage on STK500v1, STK500v2 and STK600
2023-04-19 11:30:29 +02:00
MCUdude
dde83a224e Handle invalid vtarg arguments 2023-04-19 11:16:47 +02:00
MCUdude
dfd8508439 Rename HAS_AREF_ADJ to HAS_VAREF_ADJ 2023-04-19 08:27:30 +02:00
MCUdude
4733b6b1c7 Fix -xvtarg for stk500v1 programmers 2023-04-18 23:47:46 +02:00
MCUdude
d0bd9543c8 Add -xvtarg to stk500/v2 2023-04-18 23:00:45 +02:00
Stefan Rueger
45a0881110
Reconcile more avrdude.conf's memory readback with ATDFs 2023-04-18 20:13:25 +01:00
Stefan Rueger
2ea302f05c
Reconcile more avrdude.conf's memory delay with ATDFs 2023-04-18 20:13:15 +01:00
Stefan Rueger
bd08cc35db
Populate initval of fuses and lock bits
... and at the same time remove tcd0cfg fuse from all but 20 modern AVR8X
parts, which were inherited in error according to the ATDF files
2023-04-18 20:03:56 +01:00
Stefan Rueger
7b7a7988ab
Improve semi-automated rewrite of avrdude.conf for memory parameters 2023-04-18 20:01:43 +01:00
Stefan Rueger
1f1cbb6af4
Match variants part ids for -p and print variants on -vp? 2023-04-18 02:05:42 +01:00
Stefan Rueger
326ca384d8
Align avrdude.conf variants in columns 2023-04-18 02:03:10 +01:00
MCUdude
15e53a50b2 add -xvtarg to jtag3 TPI programmers
Currently, only the Power Debugger can supply voltage to a TPI device
2023-04-18 00:02:45 +02:00
MCUdude
a02948e2cf Last apptempt at trying to fix programmer info in verbose mode 2023-04-18 00:00:49 +02:00
MCUdude
d53f034ac6 Attempt to fix programmer info 2023-04-17 23:44:34 +02:00
MCUdude
44a6b101ce Only print programmer-to-target spesific data when...
pgm->display is called
2023-04-17 22:31:17 +02:00
MCUdude
723da383b4 pgm->parseextparams is an optional function 2023-04-17 22:18:54 +02:00
MCUdude
a8b263f1f0 Add -xvtarg to jtag3.c 2023-04-17 22:18:04 +02:00
MCUdude
7b5867943d Fix typo 2023-04-17 22:16:17 +02:00
MCUdude
73469a5e3a Add comment 2023-04-17 19:41:03 +02:00
MCUdude
1078cd656f Add non-supported functionality from AVR Dragon 2023-04-17 19:40:47 +02:00
MCUdude
e9492b564b make stk500v2 set_vtarget, set_varef and set_fosc hardware dependent
based on data from avrdude.conf
2023-04-17 19:40:09 +02:00
MCUdude
50df3a6303 Fix formatting 2023-04-17 19:39:26 +02:00
MCUdude
e0f5c552b7 make set_vtarget, set_varef and set_fosc hardware dependent
based on data from avrdude.conf
2023-04-17 19:38:55 +02:00
MCUdude
e67963bf26 Add comments 2023-04-17 19:37:10 +02:00
MCUdude
5c85a5a2fb Add HAS_AREF_ADJ 2023-04-17 19:36:19 +02:00
MCUdude
d82847c95b Merge branch 'main' into more-extra-parameters 2023-04-17 18:07:57 +02:00
Stefan Rueger
c70a3e3549
Update NEWS 2023-04-17 01:39:27 +01:00
Stefan Rueger
436a6f5e8b
Update NEWS 2023-04-17 01:36:05 +01:00
Hans
999e412c41
Add -xhelp to programmers that supports extended parameters (#1338) 2023-04-17 01:31:42 +01:00
Stefan Rueger
51703dfc94
Move avrintel into libavrdude (#1341)
And update avrintel.[ch] collating vtab_<mcu> table pointers
2023-04-17 01:28:43 +01:00
Stefan Rueger
e83d4bda40
Populate avrdude.conf's variants from ATDFs 2023-04-17 01:14:24 +01:00
Stefan Rueger
3557ee0e77
Reconcile avrdude.conf's memory readsize with ATDFs 2023-04-17 01:11:09 +01:00
Stefan Rueger
6734ef4e82
Reconcile avrdude.conf's memory readback with ATDFs 2023-04-17 01:11:04 +01:00
Stefan Rueger
2da787c3fa
Reconcile avrdude.conf's memory blocksize with ATDFs 2023-04-17 01:10:50 +01:00
Stefan Rueger
b347cb4931
Reconcile avrdude.conf's part togglevtg with ATDFs 2023-04-17 01:09:57 +01:00
Stefan Rueger
84a2701db9
Reconcile avrdude.conf's part resetdelayus with ATDFs 2023-04-17 01:09:34 +01:00
Stefan Rueger
1d2c61637e
Reconcile avrdude.conf's part resetdelay with ATDFs 2023-04-17 01:09:30 +01:00
Stefan Rueger
1c042860bd
Reconcile avrdude.conf's part resetdelayms with ATDFs 2023-04-17 01:09:25 +01:00
Stefan Rueger
0394068a5d
Reconcile avrdude.conf's part programlockpolltimeout with ATDFs 2023-04-17 01:09:16 +01:00
Stefan Rueger
70ad14f950
Reconcile avrdude.conf's part programfusepolltimeout with ATDFs 2023-04-17 01:09:07 +01:00
Stefan Rueger
cdae934704
Reconcile avrdude.conf's part progmodedelay with ATDFs 2023-04-17 01:09:02 +01:00
Stefan Rueger
5f90630e49
Reconcile avrdude.conf's part pp_controlstack with ATDFs 2023-04-17 01:08:53 +01:00
Stefan Rueger
ec8c2d3200
Reconcile avrdude.conf's part poweroffdelay with ATDFs 2023-04-17 01:08:48 +01:00
Stefan Rueger
b5ab2b4df6
Reconcile avrdude.conf's part pollmethod with ATDFs 2023-04-17 01:08:34 +01:00
Stefan Rueger
942380d6c1
Reconcile avrdude.conf's part latchcycles with ATDFs 2023-04-17 01:08:25 +01:00
Stefan Rueger
6d76c21412
Reconcile avrdude.conf's part hvspcmdexedelay with ATDFs 2023-04-17 01:08:16 +01:00
Stefan Rueger
c8208b5a11
Reconcile avrdude.conf's part hvleavestabdelay with ATDFs 2023-04-17 01:08:11 +01:00
Stefan Rueger
071576b82c
Reconcile avrdude.conf's part hventerstabdelay with ATDFs 2023-04-17 01:08:06 +01:00
Stefan Rueger
f5a63afc55
Reconcile avrdude.conf's part chiperasepolltimeout with ATDFs 2023-04-17 01:07:48 +01:00
Stefan Rueger
fe8b239a64
Add new component initval to memories in avrdude.conf
... for the factory setting of fuses and lock bits
2023-04-17 01:03:38 +01:00
Stefan Rueger
6c6081ebda
Add new component variants to parts in avrdude.conf
This is a list of strings each signifying an alternative part name and some of
the part's properties, eg:
  "ATmega328P-AU: 'TQFP32', Fmax=20000000 Hz, temp=[-40 C, 85 C], Vcc=[1.8 V, 5.5 V]"
2023-04-17 00:32:31 +01:00
Stefan Rueger
22bed55ebe
Reconcile avrdude.conf's ocdrev with ATDFs 2023-04-16 21:34:46 +01:00
Stefan Rueger
52780523ba
Add MCU registers needed for debugWIRE/JTAG 2023-04-16 18:59:24 +01:00
MCUdude
1f3f2ccbdc Add support for HAS_FOSC_ADJ in avrdude.conf 2023-04-16 19:33:22 +02:00
Stefan Rueger
b4e0fa8c64
Add flash_instr and eeprom_instr to 5 parts
Needed for debugWIRE
  - AT90USB162
  - AT90USB82
  - ATmega16U2
  - ATmega32U2
  - ATmega8U2
2023-04-16 17:49:08 +01:00
Stefan Rueger
b759dad482
Add pagel/bs2 pins to 23 parts
This vital info for parallel programming was missing on 23 parts:
  - ATmega103
  - ATmega169A
  - ATmega169
  - ATmega169PA
  - ATmega169P
  - ATmega3290A
  - ATmega3290
  - ATmega3290PA
  - ATmega3290P
  - ATmega329A
  - ATmega329
  - ATmega329PA
  - ATmega329P
  - ATmega6490A
  - ATmega6490
  - ATmega6490P
  - ATmega649A
  - ATmega649
  - ATmega649P
  - ATmega8515
  - ATtiny167
  - ATtiny43U
  - ATtiny87
2023-04-16 17:46:09 +01:00
Stefan Rueger
f5b0f83d2d
Add boot section size to modern AVR8X parts 2023-04-16 17:34:17 +01:00
Stefan Rueger
d39c738542
Update avrdude.conf ATmega165 entry
- Corrects signature to
     signature              = 0x1e 0x94 0x07;
     Source: https://github.com/thegaragelab/arduino/blob/master/USB_Programmer/progisp172/eng/ATmega165.xml

 - Lengthens EEPROM write delay to
     min_write_delay    = 9000;
     Source: Application note AVR513 https://ww1.microchip.com/downloads/en/Appnotes/doc8064.pdf
2023-04-16 16:17:47 +01:00
Stefan Rueger
6e88b980e7
Add XMEGA-E fuse for fault detection action on Px0..5 2023-04-16 16:10:29 +01:00
Stefan Rueger
62d2949405
Add 24 parts to avrdude.conf
- ATmega16M1
 - ATmega32C1
 - ATmega64C1
 - ATA5505
 - ATA6612C
 - ATA6613C
 - ATA6614Q
 - ATA6616C
 - ATA6617C
 - ATA664251
 - ATmega16HVA
 - ATmega8HVA
 - ATmega16HVB
 - ATmega16HVBrevB
 - ATmega32HVB
 - ATmega32HVBrevB
 - ATmega64HVE2
 - ATmega32HVE2
 - AT90PWM1
 - AT90PWM161
 - AT90PWM81
 - ATxmega32C3
 - ATxmega32D3
 - ATtiny416auto

And modify
 - ATmega32M1
 - ATmega64M1

Almost entirely automatically from ATDF sheets
2023-04-16 14:02:12 +01:00
Stefan Rueger
6893586d53
Improve avrdude.conf in-situ documentation 2023-04-16 13:58:58 +01:00
Stefan Rueger
c1e725b53d
Update NEWS 2023-04-06 21:16:59 +01:00
Stefan Rueger
b6cbbea120
Update avrintel.[ch] (#1333)
* Update avrintel.[ch]

These are written by a program that takes AVR-relevant sources such as
io*.h header files and atdf files into account. For this update a set of
decade-old .xml files have been added (useful for discontinued chips
that may still want to be programmed).

* Format avrintel table to max 99 chars

This to be able to extract more easily relevant information from the
source. Now can grep //.Mem avrintel.c to extract a table with memory
sizes, similarly  grep //.Source or grep //.ID. And lines are now less
than 100 characters wide.

* Expand avrintel table to cover configuration bitfields
2023-04-06 21:11:20 +01:00
Stefan Rueger
e6e02aeb51
Merge pull request #1332 from MCUdude/flyswatter2
Add Flyswatter2 programmer
2023-04-06 21:10:44 +01:00
Stefan Rueger
99061a99c8
Merge pull request #1331 from MCUdude/docs-495
Documentation improvements
2023-04-06 21:10:03 +01:00
Hans
f7afbe0303
Add terminal read, write and erase with address intervals (#1320)
and improved documentation
---------

Co-authored-by: Stefan Rueger <stefan.rueger@urclocks.com>
2023-04-06 21:09:13 +01:00
am-ar
ffcdcd89e1
Add CH341A programmer (#1215)
- Add CH341A programmer support 
 - Provide paged access functions so terminal cache works
 - Provide avrdude.conf entry for the ch341a programmer
 - Select ch341a reset line from reset=<n>; property in avrdude.conf.in
 - Update ch341a documentation
---------
Co-authored-by: Alex Manoel Ferreira Silva (Windol) <windol@legytma.com.br>
Co-authored-by: Stefan Rueger <stefan.rueger@urclocks.com>
Tested and reviewed by @MCUdude and @mcuee
2023-04-06 21:06:56 +01:00
MCUdude
515af74201 Attempt to standardize programmer extended parameter styling 2023-03-31 08:30:01 +02:00
MCUdude
3944d5f340 Small grammar fixes 2023-03-31 07:58:44 +02:00
MCUdude
e8a51771d4 Add Flyswatter 2 programmer 2023-03-30 20:12:46 +02:00
MCUdude
e1464e6b4d update terminal mode sck and parms documentation 2023-03-29 22:22:49 +02:00
MCUdude
b7009afe22 Fix formatting 2023-03-29 21:41:15 +02:00
MCUdude
9d7f850e6b Viewing operational parameters in terminal mode is not
limited to the STK500 and STK600 programmers
2023-03-29 21:38:03 +02:00
MCUdude
605e0afa74 Add information about bitclock values stored in programmers 2023-03-29 21:26:30 +02:00
Stefan Rueger
7a8d257676
Update NEWS 2023-03-22 00:15:02 +00:00
Stefan Rueger
421a85adc4
Merge pull request #1323 from stefanrueger/usbtiny
Fix return value in usbtiny_cmd() and wrong error msg
2023-03-21 23:53:16 +00:00
Stefan Rueger
cb2c2e2635
Merge pull request #1318 from stefanrueger/updi-eeprom
Support UPDI EEPROM write
2023-03-21 23:52:53 +00:00
Stefan Rueger
95cdc6caca
Merge pull request #1317 from MCUdude/prog-failed-error-msg
Print meaningful error message when using the serialupdi and bitbanged UART ISP programmers
2023-03-21 23:52:30 +00:00
Stefan Rueger
7f8d488088
Merge pull request #1315 from MCUdude/terminal-single-byte-write
Make the start write address optional in terminal mode
2023-03-21 23:51:27 +00:00
Stefan Rueger
a953f3cb17
Merge pull request #1314 from llinjupt/patch_avrispv2
Remove PM_PDI flag for avrispv2 programmer
2023-03-21 23:50:50 +00:00
Stefan Rueger
e5be3ef206
Merge pull request #1310 from stefanrueger/at89s5x
Support AT89S51, AT89S52, AT90S2323 and ATtiny22
2023-03-21 23:50:35 +00:00
Stefan Rueger
31bc1d3da3
Merge pull request #1309 from mariusgreuel/pr-auto-reset
Change Arduino auto-reset via RTS to allow direct RTS-reset connection
2023-03-21 23:50:20 +00:00
Stefan Rueger
4169150284
Merge pull request #1299 from SebKuzminsky/libgpiod
Add optional libgpiod support to linuxgpio
2023-03-21 23:49:59 +00:00
Stefan Rueger
7e94ed4442
Change wiring auto-reset to allow direct DTR/RTS-reset connection 2023-03-19 19:25:55 +00:00
Stefan Rueger
ed6ad1eb55
Fix return value in usbtiny_cmd() and wrong error msg 2023-03-19 13:05:58 +00:00
Stefan Rueger
b7f48a08db
Fix typo 2023-03-18 16:37:08 +00:00
Sebastian Kuzminsky
2663fb4d5c avrdude.conf: add connection_type to example linuxgpio programmer 2023-03-16 08:53:02 -06:00
Sebastian Kuzminsky
bfb795551c avrdude.conf: move raspberry_pi_gpio reset, add prog_modes, reformat
This makes the raspberry_pi_gpio programmer work on older Pis with the
smaller 26-pin GPIO header.

Updates based on code review by Hans (MCUdude).
2023-03-16 08:53:02 -06:00
Sebastian Kuzminsky
5abbefe63b add a new conntype for linuxgpio
This also adds a default linuxgpio port ("gpiochip0"), and adds a
programmer to the avrdude.conf file using linuxgpio from the Raspberry
Pi GPIO port.
2023-03-16 08:53:02 -06:00
Sebastian Kuzminsky
3b93eccfb5 gpiod: find gpio lines by port ("gpiochipN") and offset (pin number)
Before this commit, linuxgpio-gpiod used `gpiod_line_find()` to find
gpio lines by name, and would construct the gpio name by appending the
requested gpio number to the string "GPIO".  This had the advantage
that it didn't have to specify the gpiochip to use, since gpio names are
globally unique in gpiod-land.  But it has the severe drawback that only
gpios whose name begins with "GPIO" could be used.

This commit changes that to use `gpiod_line_get()` instead, which takes
a gpiochip name (the avrdude "port") and an "offset" (the pin number on
that chip).  This lets it use any available gpio line, no matter what
name libgpiod assigned it.
2023-03-16 08:53:02 -06:00
Sebastian Kuzminsky
cffd3c976a linuxgpio: add optional libgpiod support
The "linuxgpio" backend will now try both the old sysfs and new (since
Linux 4.8) libgpiod interface to access gpio pins.  If libgpiod works
it will use that, if it does not work it will fall back to the old
sysfs interface.

The libgpiod code is compiled in if libgpiod is available at build time,
and compiled out otherwise.
2023-03-16 08:53:02 -06:00
Sebastian Kuzminsky
a7bf91c86d cmake: find & use libgpiod 2023-03-16 08:53:00 -06:00
Stefan Rueger
770c6b3975
Update comments for AT89S51/2 2023-03-16 10:21:13 +00:00
Sebastian Kuzminsky
0ff4192248 linuxgpio: rename all internal functions and variables to include "sysfs"
This commit renames the internal functions and variables of the linuxgpio
pin driver to include "sysfs", to indicate that they're referring to
the older sysfs interface.

The following commits will add libgpiod support to the linuxgpio pin
driver, and autoselect between them.
2023-03-15 18:38:51 -06:00
Stefan Rueger
666dfd7b36
Fix comment 2023-03-16 00:30:59 +00:00
Stefan Rueger
0d299b9aa9
Support UPDI EEPROM write 2023-03-15 21:37:24 +00:00
Stefan Rueger
2b04a2e4a7
Update urclock/stk500 reset times and streamline DTR/RTS twiddling 2023-03-15 19:42:54 +00:00
MCUdude
c72aff3083 Print meaningful error message
When using the serialupdi and bitbanged UART ISP programmers
2023-03-15 20:42:09 +01:00
MCUdude
4311da6803 Document terminal write feature
where start addres isn't needed
2023-03-15 20:14:32 +01:00
Stefan Rueger
ac55a86e9a
Add lock write command for AT89S51/2 2023-03-15 18:48:56 +00:00
MCUdude
e1ba5288a8 Make the start write address optional
when writing data to a memory that's exactly one byte large
2023-03-08 20:05:24 +01:00
llinjupt
09b6f89531 Remove PM_PDI flag for avrispv2 programmer 2023-03-08 22:17:51 +08:00
Stefan Rueger
6c8f7e10fd
Support AT89S51, AT89S52, AT902323 and ATtiny22
In `avrdude.conf.in` this PR
  - Adds AT89S51 and AT89S52
  - Adds AT902323 and ATtiny22 by inheritance from AT902343
  - Changes AT90S4433 to inherit from AT90S2333 (same datasheet)

Changes in `avrintel.[ch]` are needed to add the two new `mucid`s
for AT89S51/52; as a "bycatch" a new version of avrintel.c is
deployed with corrections to UART interrupts

`config_gram.y` needed changing to suppress false warnings for the odd
address bit positions for AT89S51/52 SPI read signature commands.
2023-03-06 22:55:16 +00:00
Marius Greuel
b1da0b0922 Change Arduino auto-reset via RTS to allow direct RTS-reset connection 2023-03-05 18:27:25 +01:00
Stefan Rueger
4019edf60d
Update NEWS 2023-03-04 17:25:59 +00:00
Stefan Rueger
579927f020
Merge pull request #1308 from djacobow/dgj/extend_max_pin_number
extend max pin number to 1000
2023-03-04 17:19:34 +00:00
Stefan Rueger
cdaeb6423d
Merge pull request #1301 from mariusgreuel/pr-build_sh-cmake-fix
build.sh: For compatibility with old CMake versions, use old syntax to generate build system
2023-03-04 17:19:02 +00:00
Stefan Rueger
ea938153cb
Merge pull request #1294 from mariusgreuel/pr-hid-detection
CMake: Remove LIB_LIBHID from configuration is favor of hard-coding it
2023-03-04 17:15:31 +00:00
Stefan Rueger
1995ca6868
Merge pull request #1286 from MCUdude/xplainedmini-suffer
Add `extra_features` to easily identify a programmers special abilities
2023-03-04 17:11:08 +00:00
Stefan Rueger
4a47b10a41
Merge pull request #1285 from mariusgreuel/pr-verbal-cmake-options
CMake: Convert verbal switches into boolean expressions
2023-03-04 17:09:49 +00:00
Dave Jacobowitz
eb7c3ef95d extend max pin number to 1000
Some embedded computers with GPIO are using very
large pin numbers. For example, the pins on the
LePotato SBC use numbers in the 400's.

Extending this max value makes is possible for
users to make custom avrdude.conf additions that
use this pins.

Le Potato board:

https://libre.computer/products/aml-s905x-cc/

Le Potato pin numbering reference:
https://docs.google.com/spreadsheets/d/1U3z0Gb8HUEfCIMkvqzmhMpJfzRqjPXq7mFLC-hvbKlE
2023-03-02 17:00:13 -08:00
Marius Greuel
488da2642a build.sh: For compatibility with old CMake versions, use old syntax to generate build system 2023-02-04 17:54:18 +01:00
mcuee
dd7b359d6b
Merge pull request #1297 from mcuee/revert_pr1280
Revert PR https://github.com/avrdudes/avrdude/pull/1280
2023-01-31 10:00:28 +08:00
mcuee
b00a768b18
Revert PR https://github.com/avrdudes/avrdude/pull/1280
This will fix issue https://github.com/avrdudes/avrdude/issues/1296
2023-01-30 21:11:36 +08:00
MCUdude
911aa04ffa Add HAS_VTARG_READ
This can be used to determine if a programmer is able to read the target voltage or not
2023-01-29 21:20:50 +01:00
MCUdude
89abc1375b Print info message when target power switch is off 2023-01-29 20:26:01 +01:00
Marius Greuel
7ebe5da8c5 GitHub build action: Remove CMAKE_BUILD_TYPE from msvc job to silence warning 2023-01-20 20:50:45 +01:00
Marius Greuel
61dccf4ad1 CMake: Add ncurses library when readline is present 2023-01-20 20:42:12 +01:00
Marius Greuel
c98a49bfcd CMake: Remove LIB_LIBHID from configuration 2023-01-20 20:41:36 +01:00
MCUdude
d02e82edac rename matches() to str_starts()
The function never checked for an actual match anyways
2023-01-15 16:43:29 +01:00
MCUdude
f7ed26cb67 Minor improvement based on feedback from @stefanrueger 2023-01-15 16:43:29 +01:00
MCUdude
eede6f9ff0 Fix typo 2023-01-15 16:43:28 +01:00
MCUdude
f4563e19b8 Update docs 2023-01-15 16:43:27 +01:00
MCUdude
3083183ab4 Fix typo 2023-01-14 22:08:40 +01:00
MCUdude
960375e593 Add corrections found by -c*/s 2023-01-14 22:08:36 +01:00
MCUdude
6b3dcf83b7 Merge main branch
had to deal with a merge confilict due to PR #1282
2023-01-14 19:23:57 +01:00
Marius Greuel
909276733d CMake: Convert verbal switches into boolean expressions 2023-01-14 19:17:34 +01:00
Stefan Rueger
5ec72e240b
Update News 2023-01-14 14:46:17 +00:00
Stefan Rueger
347ecadae9
Merge pull request #1282 from stefanrueger/grammar
Reduce complexity of grammar
2023-01-14 14:36:20 +00:00
Stefan Rueger
7e5bfdeff0
Merge pull request #1277 from stefanrueger/silence
Silence gcc compiler warnings
2023-01-14 14:35:11 +00:00
Stefan Rueger
b89b79d332
Merge pull request #1276 from mcuee/document_fix
Fix documentation for avrftdi pin numbers to start with 0
2023-01-14 14:34:03 +00:00
Stefan Rueger
65686c7fed
Merge pull request #1273 from stefanrueger/stk500_value_polling
Only send write flash cmd to STK500v2 programmers if page not empty
2023-01-14 14:29:59 +00:00
Stefan Rueger
a3b7072b7d
Merge pull request #1272 from stefanrueger/mode_memdelay
Correct memory mode, delay and readback for classic parts
2023-01-14 14:29:19 +00:00
Stefan Rueger
1fa34c58a7
Print warnings for deprecated grammar use 2023-01-13 23:34:28 +00:00
Stefan Rueger
09c4b670c7
Shift simple part/memory components from grammar to config.c table 2023-01-13 23:34:18 +00:00
MCUdude
3eeba45d0a add -xsuffer and -xvtarg_switch to the docs 2023-01-13 22:18:22 +01:00
MCUdude
78d762b051 Add alterive id's to jtag3 compatible programmers 2023-01-13 20:56:24 +01:00
MCUdude
cb5f5956fc STK600 also has adjustable target power 2023-01-13 20:47:52 +01:00
mcuee
9cf4f55b87
Merge pull request #1280 from mcuee/configure_ac_readline
Update configure.ac to reflect HAVE_READLINE statue
2023-01-13 13:29:31 +08:00
mcuee
b3a29917b0
Merge pull request #1279 from mcuee/configure_ac_update
Update configure.ac for MinGW build
2023-01-13 13:29:14 +08:00
mcuee
6595f53425
Update configure.ac to reflect HAVE_READLINE statue 2023-01-13 11:05:16 +08:00
Stefan Rueger
0ae6c6543b
Shift simple programmer components from grammar to config.c table 2023-01-12 23:59:45 +00:00
Stefan Rueger
f9c5c0cfbc
Silence sign-cpmpare warnings in pickit2.c 2023-01-12 14:09:38 +00:00
mcuee
a22d379c03
Update configure.ac for MinGW build
Fix avrdudes#957.
Even though we are only supporting CMake build now, the fix is simple enough and not affecting CMake.
2023-01-12 21:06:36 +08:00
Stefan Rueger
22f9bc5260
Enable -Wextra -Wno-unused-parameter by default for gcc 2023-01-12 00:01:46 +00:00
Stefan Rueger
6088c9b98f
Silence sign-compare warning in avr910.c 2023-01-11 23:55:07 +00:00
Stefan Rueger
e349cd1f6b
Silence sign-compare warning in buterfly.c 2023-01-11 23:52:59 +00:00
Stefan Rueger
7ad5289d66
Silence sign-compare warnings in dfu.c 2023-01-11 23:50:26 +00:00
Stefan Rueger
b75e26bf6d
Silence sign-compare warnings in flip1.c 2023-01-11 23:48:04 +00:00
Stefan Rueger
81f01939c2
Silence missing-field-initializers warning in flip1.c 2023-01-11 23:45:07 +00:00
Stefan Rueger
2a79faae86
Silence sign-compare warnings in flip2.c 2023-01-11 23:38:43 +00:00
Stefan Rueger
3c51fb6aae
Silence sign-compare warnings in ft245r.c 2023-01-11 23:34:14 +00:00
Stefan Rueger
3b7f0d2c55
Use portable %lu and cast for size_t 2023-01-11 23:25:13 +00:00
Stefan Rueger
507031badf
Silence compiler warnings in jtagm.c 2023-01-11 23:18:08 +00:00
Stefan Rueger
6d15d24a4d
Fix fall through error in jtagmkI.c 2023-01-11 23:12:44 +00:00
Stefan Rueger
cec9715ba2
Silence sign-compare warnings in lists.c 2023-01-11 23:09:56 +00:00
Stefan Rueger
7f0fe41b6c
Silence sign-compare warnings in micronucleus.c 2023-01-11 22:56:41 +00:00
Stefan Rueger
aa258ace36
Silence sign-compare warnings in pgm_type.c and clean up 2023-01-11 19:32:16 +00:00
Stefan Rueger
e089d7ecc5
Silence sign-compare warnings in pindefs.c 2023-01-11 19:07:02 +00:00
Stefan Rueger
3521c9d9fb
Silence sign-compare warnings in ser_avrdoper.c 2023-01-11 19:01:00 +00:00
Stefan Rueger
c6b2f12c04
Silence sign-compare warnings in serialupdi.c 2023-01-11 18:48:14 +00:00
Stefan Rueger
3611c89ee0
Silence sign-compare warnings in usbasp.c 2023-01-11 18:32:51 +00:00
Stefan Rueger
246d2d502d
Silence sign-compare warning in usb_hidapi.c 2023-01-11 18:25:00 +00:00
Stefan Rueger
79dd434d20
Silence sign-compare warnings in usbtiny.c 2023-01-11 17:42:05 +00:00
Stefan Rueger
319ee2db9c
Silence fall through warning in update.c 2023-01-11 17:34:51 +00:00
mcuee
368bad5ca0
Document fix for avrftdi bit number should start with 0
This resolves https://github.com/avrdudes/avrdude/issues/369
2023-01-11 14:50:24 +08:00
MCUdude
dc2f79523c utilize the newly added programmer extra_features 2023-01-10 19:33:50 +01:00
MCUdude
3759644fc5 Add extra_features to more programmers
and add a short description on what it does at the top of the file
2023-01-10 19:33:09 +01:00
MCUdude
7536b15ed3 Add vtarget switch control 2023-01-10 00:10:07 +01:00
MCUdude
e3cfffda8a Add extra_features to developer options 2023-01-09 23:35:04 +01:00
MCUdude
d43858e9e1 utilize HAS_SUFFER instead of checking programmer name 2023-01-09 23:20:33 +01:00
MCUdude
4004dbd8af Add missing extra_features 2023-01-09 23:08:03 +01:00
MCUdude
36ff3fc151 Another attempt at adding programmer extra features flags 2023-01-09 21:55:12 +01:00
MCUdude
f81cf79a0b Merge branch 'main' into xplainedmini-suffer 2023-01-09 21:03:18 +01:00
Marius Greuel
6b95f9d181 Update README.md to point to GitHub Releases 2023-01-09 20:00:07 +01:00
Stefan Rueger
8150930958
Only send write flash cmd to STK500v2 programmers if page not empty
... except if it's for a bootloader: they might need to know about
0xff pages if they use an SPM page erase command and therefore
memory does not look like NOR-memory.

This is a slight optimisation for all parts (as writing 0xff pages
on NOR-memory flash is a NOP), but more importantly, prevents a
firmware error to surface for those parts that need to carry out
value polling to determine when writing the page has finished on
the device.
2023-01-09 14:14:40 +00:00
Joerg Wunsch
a8931a4eb1 Post-release 7.1 changes 2023-01-08 22:40:45 +01:00
Joerg Wunsch
2e0be1e1ae This is AVRDUDE release 7.1 2023-01-08 22:28:14 +01:00
Stefan Rueger
beeb14ee3d
Correct memory mode, delay and readback parameters
Injected automatically from the corresponding ATDF files
2023-01-08 17:03:23 +00:00
Stefan Rueger
dcb8165a1c
Show memory mode as hex number in avrdude.conf
It is a bitfield instructing STK500 how to program the memory
2023-01-08 16:57:09 +00:00
mcuee
e226add045
Merge pull request #1268 from mariusgreuel/pr-update-actions
Update GitHub actions
2023-01-06 13:10:14 +08:00
Stefan Rueger
1b8a4d48ab
Update NEWS 2023-01-05 17:40:07 +00:00
Stefan Rueger
5642cecb82
Merge pull request #1269 from mariusgreuel/pr-update-windows-hidapi
Update to latest MSVC fork of hidapi to include bug fixes
2023-01-05 17:39:02 +00:00
Marius Greuel
6e1f14bc7a Update to latest MSVC fork of hidapi to include bug fixes 2023-01-05 18:21:01 +01:00
Stefan Rueger
7250d3fea3
Update NEWS 2023-01-05 16:55:05 +00:00
Stefan Rueger
4c1192e884
Merge pull request #1266 from stefanrueger/avrcache
Silence page erase in cache code
2023-01-05 16:44:05 +00:00
Stefan Rueger
653d66b014
Ensure full words are loaded, low-byte first, for ISP programming (#1265) 2023-01-05 16:43:35 +00:00
Stefan Rueger
5328b798e4
Merge pull request #1264 from mariusgreuel/pr-msvc-readline-plan-b
Add readline library replacement for MSVC
2023-01-05 16:42:54 +00:00
Marius Greuel
739d3f85c3 GitHub actions: Use latest versions to remove warning 'Node.js 12 actions are deprecated' 2023-01-05 16:25:08 +01:00
Marius Greuel
0b9999610c Add x86 targets to Visual Studio settings file 2023-01-05 16:23:53 +01:00
Stefan Rueger
cf64837391
Silence page erase in cache code 2023-01-04 19:04:16 +00:00
Stefan Rueger
fdcfb543fc
Improve guessBootloaderStart() for modern AVR 2023-01-04 18:52:51 +00:00
Marius Greuel
c2a90f41f0 Set MSVC readline version to 0x0502, some cleanup 2023-01-04 18:02:01 +01:00
Marius Greuel
7b3cfd2724 Add readline library replacement for MSVC 2023-01-04 08:02:48 +01:00
Stefan Rueger
8b0c9988fc
Update NEWS 2023-01-03 23:16:27 +00:00
Stefan Rueger
2ca87126e5
Merge pull request #1260 from stefanrueger/avrintel
Clean up avrdude.conf.in fixing a couple of bugs
2023-01-03 20:50:41 +00:00
Stefan Rueger
b5e4ea62b9
Remove butterfly_page_erase() function
... as it raises expectations but
  - Wrongly claims to page erase eeprom but doesn't
  - Prints errors messages for all other memory types only
2023-01-03 20:46:36 +00:00
MCUdude
dcb109d2e0 failed attempt at adding 2023-01-03 21:14:31 +01:00
MCUdude
70db353748 Merge branch 'main' into xplainedmini-suffer 2023-01-03 21:01:50 +01:00
Stefan Rueger
eeb92b3c52
Change libreadline version from which it's OK to run from a pipeline 2023-01-03 16:31:50 +00:00
Joerg Wunsch
b6da4c167e Add a commented-out example for enabling parport 2023-01-03 13:53:03 +01:00
Stefan Rueger
1d6f23cae7
Update avrintel.[ch] fixing boot section sizes 2023-01-03 00:21:55 +00:00
Stefan Rueger
872af44fcd
Fix boot section size of AT90SPWM2 and related parts 2023-01-03 00:19:38 +00:00
Stefan Rueger
f8635451a2
Change avdude.conf.in into canonical form
avrdude -p*/s -c*/s outputs how avrdude understands the programmers
and parts defined in avrdude.conf.in that syntax (the canonical
form). This commit ensures that avrdude.conf.in is in canonical
form, typically removing assignments that are redundant owing to
inheritance.

Also changes a couple of comments and one programmer description
string to be more expressive.
2023-01-03 00:06:37 +00:00
Stefan Rueger
5eddc33864
Set pin number or pin list rather than adding them
Pin definitions in config_gram.y fail to clear existing pin
definitions when setting them for the second time, eg, through
inheritance, For example,

programmer parent "ft2232h"
    id                     = "tigard";
    reset                  = 5; # BD5 (GPIOL1)
;

would add pin 5 to the existing pin 3 for reset from the partent
programmer rather than overwriting the reset pin.

This commit clears any pre-existing pin definition first before
assigning the new pin number or pin list (for vcc or buff).
2023-01-02 23:57:53 +00:00
Stefan Rueger
c44d0e9c73
Fix duplicate lockbits memory output of -p*/s
In order to output memories of a part always in the same order the
developer options use an odered list of all known memories. Owing
to the partial match feature of dev_locate_mem_noalias() they
would therefore print an existing lockbits memory twice, once for
the memory lock and once for the memory lockbits.
2023-01-02 22:22:34 +00:00
Stefan Rueger
82cf688357
Stop printing redundant usbpid and hvupdi_support lists for -c*/s 2023-01-02 21:59:51 +00:00
Stefan Rueger
abdc65d79f
Shift initial current_struct setting from grammar to parser 2023-01-02 21:48:53 +00:00
Stefan Rueger
a301a3c4bc
Update NEWS 2023-01-02 17:36:26 +00:00
Stefan Rueger
eca0fab1f7
Merge pull request #1258 from stefanrueger/usbsn
Move static usbsn into serdev structure, remove serno access function
2023-01-02 17:33:36 +00:00
Stefan Rueger
74cbb51ef5
Clarify comment on copying usbsn 2023-01-02 17:10:15 +00:00
Stefan Rueger
0a883973a2
Move static usbsn into serdev structure, remove serno access function 2023-01-02 16:55:33 +00:00
Stefan Rueger
8d8157bf8b
Merge pull request #1255 from dl8dtl/add_q_terminal_command
Add a "q" command to the terminal
2023-01-02 14:28:49 +00:00
Stefan Rueger
b5cabc1dcf
Move q command to end of list 2023-01-02 14:26:11 +00:00
Stefan Rueger
bc198fd18d
Merge pull request #1256 from stefanrueger/partial-matches
Fix partial matches for locate_mem() and do_cmd()
2023-01-02 14:23:25 +00:00
Bas Wijnen
dc0ab33a58
Change definition of NO_PIN to 1+PIN_MAX (#1231)
Fixes bug #1228 that gpio 0 could not be used by the linuxgpio system.

* Add sanity checks
* Loop over defined pins only

Co-authored-by: Stefan Rueger <stefan.rueger@urclocks.com>
2023-01-02 14:23:01 +00:00
Stefan Rueger
17e2feff26
Fix partial matches for locate_mem() and do_cmd() 2023-01-01 23:29:06 +00:00
Joerg Wunsch
b6d50ef0a9 Extend the comment for the serial number function
Hint that it is actually a function pointer rather than a serial
number itself (in whatever form).
2023-01-01 22:36:50 +01:00
Joerg Wunsch
e45195d643 Add a "q" command to the terminal
"q" used to be a unique abbrevation for "quit" before the introduction
of the "quell" command, and it was an easy way to exit terminal mode.

By adding it as an explicit command (must be before all longer
commands starting with "q"), this functionality is regained.
2023-01-01 22:33:30 +01:00
Joerg Wunsch
06e999b8c5 Check whether serial_serno is not NULL before calling it.
For devices connected through a real serial device rather than
USB, there is no transport-layer serial number available.

stk500v2.c (and jtag3.c) tried to always call this function.

Closes #1254
2023-01-01 22:23:44 +01:00
Stefan Rueger
b2c03f5d40
Update NEWS 2022-12-31 16:14:49 +00:00
Stefan Rueger
f0649d76da
Merge pull request #1251 from stefanrueger/urclock-drain
Guard urclock_getsync() against initial spurious input
2022-12-31 14:59:43 +00:00
Stefan Rueger
d09b83079c
Merge pull request #1248 from mariusgreuel/pr-fix-win32-ser_recv-timeout
Make WIN32 implementation of ser_recv() fail on time-out
2022-12-31 14:58:42 +00:00
Stefan Rueger
9c3263a851
Merge pull request #1247 from mariusgreuel/pr-silence-conf-path-detection
Silence conf path detection debug output
2022-12-31 14:57:27 +00:00
Stefan Rueger
90dfee80ba
Change info on libreadline to notice2 level 2022-12-31 12:42:12 +00:00
Stefan Rueger
ac10272bb6
Lengthen delay after reset for benefit of autobaud bootloaders 2022-12-31 12:27:07 +00:00
Stefan Rueger
ab3da9f87c
Guard urclock_getsync() against initial spurious input 2022-12-30 21:05:57 +00:00
Marius Greuel
161e25e886 Correct messages in WIN32 net_recv() 2022-12-30 12:13:36 +01:00
Marius Greuel
894d4cba10 Make WIN32 implementation of ser_recv() fail on time-out 2022-12-29 15:35:20 +01:00
Marius Greuel
d001172b46 Silence conf path detection debug output 2022-12-29 11:55:15 +01:00
Stefan Rueger
0f956e90eb
Update NEWS 2022-12-29 03:05:09 +00:00
Stefan Rueger
d91c33b5e3
Merge pull request #1243 from mariusgreuel/pr-cmake-updates
CMake updates
2022-12-29 03:03:57 +00:00
Stefan Rueger
e2dc3621db
Update NEWS 2022-12-29 03:03:08 +00:00
Stefan Rueger
b11475f077
Merge pull request #1246 from stefanrueger/urclock-sync-ftdi
Modify recv timeouts to accommodate urclock sync with ftdi
2022-12-29 02:59:42 +00:00
Stefan Rueger
50a5d87a4e
Modify recv timeouts to accommodate urclock sync with ftdi 2022-12-28 15:30:38 +00:00
Stefan Rueger
92f980d15f
Update NEWS 2022-12-28 13:21:28 +00:00
Stefan Rueger
71b7e6d51f
Downgrade flash read unsupported err msg to notice 2022-12-28 13:16:53 +00:00
Joerg Wunsch
8a4ab97360 Remove trailing white space in NEWS 2022-12-28 08:58:33 +01:00
Marius Greuel
724fd9d572 CMake: Add Visual Studio settings file 2022-12-27 16:38:48 +01:00
Marius Greuel
a138ec259f CMake: Rename option USE_EXTERNAL to USE_EXTERNAL_LIBS 2022-12-27 16:35:36 +01:00
Marius Greuel
80740071e2 CMake: Remove unused MSVC disable warning options 2022-12-27 16:31:49 +01:00
Marius Greuel
7a5883b75d CMake: Bump minimum version to 3.14 2022-12-27 16:31:28 +01:00
mcuee
46368b7059
Update NEWS 2022-12-27 22:43:27 +08:00
mcuee
3e08177450
Merge pull request #1242 from mariusgreuel/pr-add-ft2232h-support
Add FT2232H support for Windows, Tigard programmer
2022-12-27 22:12:36 +08:00
Marius Greuel
f220656e0b CMake: For MSVC builds, use latest libftdi for Windows 2022-12-27 13:35:52 +01:00
Marius Greuel
805db5b13e Add tigard programmer 2022-12-27 13:17:27 +01:00
Marius Greuel
aed9e1b7fa Improve FTDI programmer documentation 2022-12-27 13:09:00 +01:00
Marius Greuel
9412413fca Make 2232hio programmer derive from ft2232h 2022-12-27 13:05:38 +01:00
Marius Greuel
252d6833d4 Add ft4232h programmer 2022-12-27 13:03:41 +01:00
Marius Greuel
5d0f151f4a Add ft2232h programmer for consistency with existing ft232h programmer 2022-12-27 13:00:57 +01:00
mcuee
0c0da9162c
Merge pull request #1237 from MCUdude/print-expected-signature
Print expected signature when the one read by the programmer doesn't match the expected one
2022-12-27 08:56:25 +08:00
mcuee
afb72c998e
Merge pull request #1241 from mcuee/build_sh_netbsd
Update build.sh for NetBSD
2022-12-27 08:53:51 +08:00
mcuee
d4bef10e30
Update build.sh for NetBSD
https://github.com/avrdudes/avrdude/issues/1177#issuecomment-1336364197

This is to address issue https://github.com/avrdudes/avrdude/issues/1177 for NetBSD
2022-12-27 08:43:26 +08:00
mcuee
eba5cea8e1
Merge pull request #1240 from mcuee/build_sh_linux
To work around Issue #1107
2022-12-27 08:36:25 +08:00
mcuee
2c4f2ada3f
To work around Issue #1107
https://github.com/avrdudes/avrdude/issues/1107#issuecomment-1265873339
2022-12-27 08:25:43 +08:00
mcuee
49834a47cd
Merge pull request #1239 from mcuee/macos_action
Temporarily disable brew update in macOS github action
2022-12-27 08:02:10 +08:00
mcuee
39ab053937
Temporary disable brew update in macOS github action 2022-12-27 07:52:31 +08:00
MCUdude
c5091c599a Explain what the various SUFFER bits do 2022-12-25 20:18:36 +01:00
MCUdude
50708ef4d9 Add more EDBG control commands 2022-12-25 20:17:54 +01:00
MCUdude
bb73079d43 Add more EDBG control commands 2022-12-25 20:17:14 +01:00
MCUdude
8900550bb5 Add Xplained Mini SUFFER R/W support
for boards that uses the stk500v2 protocol, like the Xplained Mini ATmega328PB
2022-12-25 20:08:51 +01:00
MCUdude
6e98a445cc Merge branch 'main' into xplainedmini-suffer 2022-12-25 18:41:06 +01:00
MCUdude
57cfced151 Print expected signature
... when the one read by the programmer doesn't match the expected one.
2022-12-25 18:23:53 +01:00
MCUdude
975f94973e Initial support for Xplained Mini SUFFER register read/write 2022-12-23 15:05:18 +01:00
Stefan Rueger
857344295c
Merge pull request #1234 from stefanrueger/docs
Mention developer options in documentation and Usage()
2022-12-23 13:17:43 +00:00
Stefan Rueger
292f1d54b9
Update NEWS 2022-12-21 19:14:50 +00:00
Stefan Rueger
217adc543b
Merge pull request #1233 from janegilruud/fix-pickit4-snap-jtag
#1052 Add JTAG support for PICkit4 and Snap.
2022-12-21 19:12:33 +00:00
Stefan Rueger
c2070d44c7
Merge pull request #1226 from stefanrueger/optiboot-eeprom
Hint at -xeepromrw option in EEPROM error messages
2022-12-21 19:12:06 +00:00
Hans
c991ae9739
Read programmer serial number from libusb or hidusb (#1223)
* Silence compiler warnings

* Fix a fall-through error in switch

* Slightly reformat programmer info printout
Now the target voltage is printed out along with the HW version, FW version and serial number, and they all allign nicely. When in ISP mode, the "SCK period" value is printed _after_ the target voltage readout, and _before_ the additional clocks the programmer holds, such as JTAG, PDI and UPDI clocks.

Co-authored-by: Stefan Rueger <stefan.rueger@urclocks.com>
2022-12-21 19:11:31 +00:00
Stefan Rueger
a696c94d8f
Merge pull request #1220 from stefanrueger/terminal-prompt
Remove extraneous avrdude> prompt at end of terminal session
2022-12-21 19:09:51 +00:00
Stefan Rueger
b29dfb77e9
Merge pull request #1219 from MCUdude/pic-mode-recovery
Add alternative USB PID for PICkit4/SNAP in PIC mode
2022-12-21 19:09:34 +00:00
Stefan Rueger
3c152dc122
Merge pull request #1216 from MCUdude/slow-clock-error
Print meaningful error when a too slow ISP clock is detected
2022-12-21 19:09:11 +00:00
Stefan Rueger
41c9ed02e3
Mention developer options in documentation and Usage() 2022-12-21 19:06:26 +00:00
Stefan Rueger
435343bab3
Add more bootloader hashes 2022-12-20 23:25:43 +00:00
Stefan Rueger
c6633fedce
Emphasise -xeepromrw and -xbootsize=<n> in documentation 2022-12-20 22:40:27 +00:00
Jan Egil Ruud
a2ae465484 #1052 Update PICkit4 and Snap documentation with new modes. 2022-12-20 22:47:06 +01:00
Stefan Rueger
4d9d4050e0
Add hashes for optiboot bootloader instantiations 2022-12-20 21:37:20 +00:00
Jan Egil Ruud
918e01d93d #1052 Remove AVR32JTAG support for PICkit4 and Snap. 2022-12-20 12:02:42 +01:00
Jan Egil Ruud
d1010fd46f #1052 Add JTAG support for PICkit4 and Snap. 2022-12-20 11:59:00 +01:00
Stefan Rueger
3b14c2df77
Hint at -xeepromrw option in EEPROM error messages 2022-12-17 18:40:09 +00:00
MCUdude
0be8f3b82d Start sentence with lower case character 2022-12-16 20:27:20 +01:00
Stefan Rueger
412eb9503e
Remove extraneous avrdude> prompt at end of terminal session 2022-12-14 23:17:44 +00:00
MCUdude
30e90bdfd2 Add alternative USB PID for PICkit4/SNAP in PIC mode 2022-12-14 20:11:43 +01:00
Stefan Rueger
159d12693e
Update NEWS 2022-12-14 00:27:13 +00:00
Hans
95363a11a7
Terminal read improvements (#1209)
* Preserve last address read from and length when reading a memory
* Add support for "graceful" memory read rollover
* Add extra padding for memories larger than 64kiB
* Bu default, don't read more bytes than the memory contains
* Prevent users from reading the same memory address twice
* Remove >>> echo and print read/dump command
* Only echo dump command in verbose mode
2022-12-14 00:10:30 +00:00
Stefan Rueger
bbd3ed21ef
Merge pull request #1208 from stefanrueger/urclock-updi
Add urclock support for parts with bootloaders in low flash
2022-12-14 00:08:27 +00:00
Jörg Wunsch
b10854677d
Consider libedit only in interactive mode (#1207) 2022-12-14 00:07:41 +00:00
Stefan Rueger
72f097502f
Merge pull request #1206 from stefanrueger/nsafety
Fix reading of .elf files
2022-12-14 00:06:47 +00:00
Stefan Rueger
e4f10a33ab
Clarify comment 2022-12-13 23:59:58 +00:00
Stefan Rueger
9bd4dee254
Merge pull request #1205 from janegilruud/jtag3-tpi-jer
Added TPI support for Microchip tools
2022-12-13 23:56:25 +00:00
Jan Egil Ruud
f08f771ab4 #822 Fixed print_parms for TPI. 2022-12-13 15:07:14 +01:00
Jan Egil Ruud
af43a7757d #822 Print Vtarget when using TPI. 2022-12-12 14:31:41 +01:00
Jan Egil Ruud
2561d87fbd #822 Removed JTAGICE3 TPI support. 2022-12-12 14:10:42 +01:00
Stefan Rueger
db0258a7d8
Add fuses, usersig, userrow, signature and data to elf_mem_limits() 2022-12-10 23:28:56 +00:00
Stefan Rueger
8024bfd4fb
Add partial urclock support for parts with bootloaders in low flash 2022-12-03 23:20:05 +00:00
Stefan Rueger
6b03d7dc5a
Correct upper flash boundary for 8-bit AVR parts in elf_mem_limits() 2022-12-03 13:39:28 +00:00
Stefan Rueger
23dddef64b
Mark unused function parameters as such 2022-12-02 19:03:06 +00:00
Stefan Rueger
f688baabb7
Improve error messaging 2022-12-02 18:45:47 +00:00
Stefan Rueger
2e98ee3a1c
Check elf section fits into memory and fail elf2b() on elf handling errors 2022-12-02 18:28:19 +00:00
Stefan Rueger
3b30e5d424
Fix elf2b() to consider all sections in segments 2022-12-01 20:29:54 +00:00
Stefan Rueger
0ae632070f
Rewrite elf2b() in equivalent way absorbing elf_get_scn() 2022-12-01 20:21:33 +00:00
Jan Egil Ruud
8db18e64ed Remove redundant mem-check. 2022-12-01 20:12:26 +01:00
Jan Egil Ruud
dc64fb716f Fix wrongfully call to initCache() according to stefanrueger's instructions. 2022-12-01 20:05:55 +01:00
Jan Egil Ruud
f78e14ee96 Revert "Skip chaching when size of memory is 0."
This reverts commit bb808e8d5f.
2022-12-01 20:01:11 +01:00
Jan Egil Ruud
bb808e8d5f Skip chaching when size of memory is 0. 2022-12-01 15:16:23 +01:00
Jan Egil Ruud
e18b5c4fb0 Made the code a little prettier. 2022-12-01 00:01:29 +01:00
Jan Egil Ruud
b643f0a1a0 #822 Fixed bug in TPI byte write for ATtiny20 and ATtiny40. 2022-11-30 23:49:20 +01:00
Jan Egil Ruud
b52bd393de #822 Added TPI support for JTAGICE3. 2022-11-30 23:39:37 +01:00
Jan Egil Ruud
95160e8801 Changed verbose level on TPI initialize notice. 2022-11-30 23:21:30 +01:00
Jan Egil Ruud
e87a9b59b6 #822 Added and tested TPI support for AtmelICE, PowerDebugger, PICkit4 and Snap. 2022-11-30 23:08:55 +01:00
Jan Egil Ruud
1eb6a06055 #822 Small refactoring and clean up. 2022-11-30 23:07:05 +01:00
Jan Egil Ruud
cad296f780 Attempt to fix msvc builds. 2022-11-30 00:27:25 +01:00
Jan Egil Ruud
90bd24a902 #822 Added support for TPI page write. 2022-11-30 00:14:19 +01:00
Stefan Rueger
ea2d7eec95
Fix fopen() file mode in fileio_fmt_autodetect() 2022-11-29 19:46:48 +00:00
Jan Egil Ruud
2f5566a8ed #822 Added support for TPI page load. 2022-11-29 20:34:05 +01:00
Jan Egil Ruud
f2156b834d #822 Added sigrow memory to tiny102 and tiny 104, and removed duplicate lockbits. 2022-11-29 09:52:45 +01:00
MCUdude
2d7ad8e373 Print meaningful ISP clock error message
Currently, only some JTAG3 compatible programmers are able to detect that the connected target's main clock speed actually is too low for for the programmer.
In this case, these will return 0xCC.
2022-11-27 22:52:45 +01:00
MCUdude
6385fb09f7 Add missing stk500v2 status constants 2022-11-27 22:41:29 +01:00
Stefan Rueger
2f2a6c0008
Update NEWS 2022-11-27 19:12:19 +00:00
Stefan Rueger
bb14386f63
Merge pull request #1199 from stefanrueger/userrow
Fix userrow size and page_size for ATtiny3216 and ATtiny3217
2022-11-27 19:05:25 +00:00
Stefan Rueger
2ac582fa02
Merge pull request #1198 from stefanrueger/delay
Tie up loose ends for urclock programmer
2022-11-27 19:04:07 +00:00
Stefan Rueger
58e2bca42c
Update n_interrupts in avrdude.conf.in and introduce eind 2022-11-27 16:56:49 +00:00
Stefan Rueger
5a0975aee7
Allow / as path deliminator in Windows for urclock metadata 2022-11-27 14:44:46 +00:00
Stefan Rueger
0c96f5d6dc
Calibrate urboot's -xdelay for windows 2022-11-27 13:57:37 +00:00
Stefan Rueger
ba9d24fdd2
Fix userrow size and page_size for ATtiny3216 and ATtiny3217 2022-11-26 17:37:51 +00:00
Stefan Rueger
0e0a0ba0eb
Get boot section info from avrdude.conf and not from avrintel.c 2022-11-26 13:53:46 +00:00
Stefan Rueger
d774e87a59
Update documentation re the urclock programmer 2022-11-26 13:23:25 +00:00
Stefan Rueger
3a5f3735ba
Adapt urclock_getsync() to consider legacy bootloaders 2022-11-26 12:54:42 +00:00
Stefan Rueger
baa52e3a02
Update NEWS 2022-11-25 23:35:37 +00:00
Stefan Rueger
1cb169ec93
Establish avr_*timestamp() routines for timing 2022-11-25 22:09:02 +00:00
Stefan Rueger
231e88aaf9
Add autobaud_sync to avrdude.conf part description 2022-11-25 19:20:45 +00:00
Stefan Rueger
d2a2ec1d1b
Merge pull request #1194 from stefanrueger/exitrc
Fix shell exit value when chip erase is delayed to next flash write
2022-11-25 17:50:01 +00:00
Stefan Rueger
bbc52499e7
Merge branch 'main' into exitrc 2022-11-25 17:43:13 +00:00
Stefan Rueger
2cecf66a61
Merge pull request #1191 from stefanrueger/jtagice_mkii
Fix parameters for JTAGICE mkII and devices with bootloaders
2022-11-25 17:40:54 +00:00
Stefan Rueger
10ca3661bb
Merge pull request #1190 from stefanrueger/bootloader-hash
Provide bootloader-hash tool
2022-11-25 17:40:36 +00:00
Stefan Rueger
664b1aa1f6
Merge pull request #1189 from stefanrueger/culture
Deprecate mosi/miso in favour of sdo/sdi
2022-11-25 17:40:25 +00:00
Stefan Rueger
607f0c48be
Merge pull request #1188 from stefanrueger/not-all-is-nor-memory
Pad pages with input file contents before avr_write()
2022-11-25 17:40:11 +00:00
Stefan Rueger
289ca4f34c
Add optiboot_lgt8f328p.hex bootloader hashes to urclock.c 2022-11-25 17:26:17 +00:00
Stefan Rueger
7269370bf6
Change notices about libreadline presence in urclock.c 2022-11-25 13:58:11 +00:00
Stefan Rueger
e6f7e158cd
Change periphery to peripheral; document deprecated miso/mosi are now sdi/sdo 2022-11-24 13:18:06 +00:00
Stefan Rueger
2b3534ea8a
Remove tabs and reformat 2022-11-24 12:36:49 +00:00
Stefan Rueger
8e79b7dc52
Fix error detection for reading a page to pad unset bytes 2022-11-24 12:16:43 +00:00
Stefan Rueger
68c6ffd7fc
Silence compiler warnings, change comments, remove typos 2022-11-24 12:14:54 +00:00
Stefan Rueger
afa57ace84
Merge pull request #1196 from mcuee/disable_readline_msvc
Disable GNU Readline for MSVC build
2022-11-24 10:13:51 +00:00
mcuee
01ed17bd5c
Disable GNU Readline for MSVC build
This is to work around the issue of finding the wrong libreadline.a from Strawberry Perl for Windows MSVC github action.

Reference:
https://github.com/avrdudes/avrdude/pull/1194#issuecomment-1325824150
2022-11-24 13:22:12 +08:00
Stefan Rueger
c3413ff0f4
Fix shell exit value when chip erase is delayed to next flash write 2022-11-23 19:53:55 +00:00
Jan Egil Ruud
f9a2bd0327 Got added support for reading and writing fuses, and chiperase. 2022-11-23 14:25:14 +01:00
Stefan Rueger
19cd7d8c69
Remove non-stk500v1 bootloaders from urclock hash table 2022-11-22 22:38:43 +00:00
Stefan Rueger
d3b14f21f9
Provide bootloader-hash tool 2022-11-22 22:38:09 +00:00
Stefan Rueger
b925b5113d
Silence compiler warnings 2022-11-22 21:49:26 +00:00
Stefan Rueger
25ca91371d
Pad pages with input file contents before avr_write() 2022-11-22 21:32:42 +00:00
Stefan Rueger
33dd231e4c
Silence some compiler warnings 2022-11-22 21:17:39 +00:00
Stefan Rueger
8c73609c0e
Fix parameters for JTAGICE mkII and devices with bootloaders 2022-11-22 21:02:25 +00:00
Stefan Rueger
796e97ee3a
Update avrdude.conf.in wrt n_boot_sections, boot_section_size, eecr, spmcr 2022-11-22 20:49:12 +00:00
Stefan Rueger
9599bf2243
Add n_boot_sections and boot_section_size to part definitions 2022-11-22 20:44:12 +00:00
Stefan Rueger
7d5ab433ca
Replace gratuitous references to slave and master with technical terms 2022-11-22 17:11:33 +00:00
Stefan Rueger
adc333ea54
Deprecate mosi/miso in favour of sdo/sdi
See https://www.oshwa.org/a-resolution-to-redefine-spi-signal-names/
2022-11-22 17:04:05 +00:00
Jan Egil Ruud
5dc2545716 Cleaned and improved TPI send and receive. 2022-11-22 14:05:01 +01:00
Jan Egil Ruud
3afdd55089 Get rid of TPI magic numbers. 2022-11-22 13:23:57 +01:00
Jan Egil Ruud
32a6ca39e4 Cleaned up whitespace in jtag3.c so it at least is consistent within the file. 2022-11-22 13:05:14 +01:00
Stefan Rueger
883d9494c8
Silence compiler warnings for urclock.c 2022-11-22 01:39:27 +00:00
Stefan Rueger
05d78828e0
Update NEWS 2022-11-22 01:29:07 +00:00
Stefan Rueger
eee17ab096
Merge pull request #1187 from mcuee/revert_pr1156
Revert PR #1156
2022-11-22 01:19:10 +00:00
Stefan Rueger
ef824d4d89
Merge pull request #1184 from mcuee/cmake_print_readline
Print HAVE_LIBREADLINE status
2022-11-22 01:18:56 +00:00
Stefan Rueger
9c30ccc6ea
Merge pull request #1175 from stefanrueger/terminal
Make terminal write's automatic number width less surprising
2022-11-22 01:18:30 +00:00
Stefan Rueger
3400527c7d
Merge pull request #1174 from stefanrueger/default_programmer
Ensure default_programmer from config files is used
2022-11-22 01:17:55 +00:00
Cristiano De Alti
c3acdccbe5
Fix JTAGICE mkII by removing the initialize call after CMD_CHIP_ERASE_ISP (#1172)
- The extra call to initialize() sends CMD_ENTER_PROGMODE_ISP causing a flash
   verification mismatch
2022-11-22 01:17:19 +00:00
Stefan Rueger
02e02be6f9
Merge pull request #1171 from stefanrueger/urclock
Provide Urclock programmer
2022-11-22 01:13:57 +00:00
Stefan Rueger
2063671a02
Merge pull request #1147 from mcuee/Xplained_Pro_PDI
Add xplainedpro_pdi programmer
2022-11-22 01:13:23 +00:00
Stefan Rueger
f9aea24fba
Reduce drain timeout value for Windows in urclock.c 2022-11-22 00:49:34 +00:00
Stefan Rueger
2e398916a7
Hash known bootloaders for urclock; they don't need -xbootsize=.... 2022-11-22 00:47:26 +00:00
mcuee
b1b8d95154
Update build.yml to remove readline under macOS
This commmit updates github action to remove the needs of GNU Readline under macOS, after the merge of PR avrdudes#1185.
2022-11-22 06:59:29 +08:00
mcuee
4c8a900452
Remove the needs of readline under macOS
This commmit updates build.sh to remove the needs of GNU Readline under macOS, after the merge of PR #1185.
2022-11-22 06:56:37 +08:00
Joerg Wunsch
8a61ae5acf PR 1181 and 1185 done 2022-11-21 23:33:37 +01:00
Jörg Wunsch
3892c5a459
Merge pull request #1181 from dl8dtl/add_em_evr_for_openbsd
Add fallback for EM_AVR
2022-11-21 23:31:14 +01:00
Jan Egil Ruud
10ccf0f515 Initial commit for jtag3 TPI support. Can read signature on ATtiny104 XPlained mini, but nothing else yet. 2022-11-21 21:18:13 +01:00
Jörg Wunsch
13e0bd030f
Merge pull request #1185 from dl8dtl/workaround_1173
Add a workaround for issue #1173
2022-11-21 15:56:40 +01:00
Joerg Wunsch
461d75bbc7 Add Marius to the dev team as well
Marius handles the MSVC and CMake staff as well as the Github
runners.
2022-11-21 09:41:46 +01:00
Joerg Wunsch
f90e36f231 Add a workaround for issue #1173
The readline compat layer for libedit which otherwise provides native
readline functionality in NetBSD and MacOS appears to have a bug that
causes subsequent prompts to be delayed until another line is being
processed.

Re-installing the callback over and over again works around that, and
does not seem to harm with GNU libreadline.
2022-11-20 22:52:41 +01:00
Stefan Rueger
7f4474f049
Delete previous metadata when writing new file to flash in urclock 2022-11-20 13:02:51 +00:00
Stefan Rueger
c0e4dd494e
Use file basename in -c urclock metadata under WIN32 2022-11-20 01:48:39 +00:00
mcuee
df4dccabfc
Update configure.ac to print libreadline status 2022-11-20 09:46:07 +08:00
Stefan Rueger
53de22cb83
Update avrintel.c for LGT8F(8|16|32)8P parts 2022-11-20 01:12:14 +00:00
Stefan Rueger
f276d325ec
Handle verification errors in read only memory areas gracefully 2022-11-20 00:27:49 +00:00
Stefan Rueger
ee25a62df6
Emulate chip erase in terminal when pgm->chip_erase() soft fails 2022-11-19 23:09:18 +00:00
Stefan Rueger
d65a9a3cee
Adapt -c urclock to new reset vector protection in urboot v7.7 2022-11-19 19:39:39 +00:00
mcuee
c9357132fa
Print HAVE_LIBREADLINE status 2022-11-19 17:22:04 +08:00
Joerg Wunsch
ff478dcb83 PR 1182 done 2022-11-19 10:00:20 +01:00
Jörg Wunsch
6c3ce22b1e
Merge pull request #1182 from dl8dtl/rewrite_authors
Rewrite authors/copyrights
2022-11-19 09:55:23 +01:00
Joerg Wunsch
77ad26ddf4 Replace the hint to AUTHORS by an URL
Suggested by: Hans
2022-11-18 21:24:10 +01:00
Joerg Wunsch
efad24e3de Rewrite authors/copyrights 2022-11-18 10:31:45 +01:00
Joerg Wunsch
2fc351750e Add Stefan and Xiaofan to the list of authors 2022-11-18 10:26:01 +01:00
Joerg Wunsch
908e6b15da Add NetBSD and OpenBSD to the build script 2022-11-17 21:20:07 +01:00
Joerg Wunsch
9df522a219 Add <sys/select.h> where appropriate
Under Posix systems, this header is documented to be required
when using select().
2022-11-17 14:14:22 +01:00
Joerg Wunsch
01be288b18 Add fallback for EM_AVR
OpenBSD still lacks this definition, so provide our own for
them.
2022-11-16 21:21:51 +01:00
Stefan Rueger
a3eeedd176
Silence some compiler warnings 2022-11-16 02:32:32 +00:00
Stefan Rueger
2abb666bd2
Prepare urclock for autobaud synchronisation 2022-11-16 02:08:13 +00:00
Stefan Rueger
d901e0a768
Update urbootPutVersion() to reflect urboot v7.7 changes 2022-11-16 00:42:36 +00:00
Stefan Rueger
82b9491cbd
Harden urclock against bootloader bricking
- Detect write restrictions with new pgm->readonly(..., addr)
 - Check in byte-wise cached write whether mem/addr allows write
 - Emulated chip erase tells user CE is delayed until first -U
 - After bootloader CE urclock_chip_erase will init reset vector
 - Low level paged write @ 0 unconditionally protects reset vector
 - Low level paged read @ 0 checks and repairs reset vector
2022-11-16 00:08:46 +00:00
Stefan Rueger
afc2f7cf0c
Hint at option -xdelay=... for urclock programmer not responding messages 2022-11-12 13:47:48 +00:00
Stefan Rueger
ff9c8bbe46
Silence min()/max() compiler warnings, fix urclock.c typo etc 2022-11-12 13:32:53 +00:00
Stefan Rueger
e2b69dec75
Remove MacOS compiler warnings for urclock.c 2022-11-12 01:12:31 +00:00
Stefan Rueger
b178deef5f
Handle n_page_erase in urclock for parts t441, t841 and t1634 2022-11-11 01:33:42 +00:00
Stefan Rueger
6e3a99be87
Add write statistics for patched flash input files at notice2 level 2022-11-11 01:27:55 +00:00
Stefan Rueger
22bd977365
Indent erasing chip message in main 2022-11-10 23:18:43 +00:00
Stefan Rueger
c67bfe39a3
Show input file staistics before patching in update.c 2022-11-10 23:00:18 +00:00
Stefan Rueger
321bddbf7b
Rename urclock's option forcetrim to restore 2022-11-10 22:35:40 +00:00
Stefan Rueger
2434c3f7f6
Make terminal write's automatic number width less surprising 2022-11-10 19:38:21 +00:00
Stefan Rueger
4c4952d4f6
Ensure default_programmer from config files is used 2022-11-10 18:20:13 +00:00
Stefan Rueger
afa408e2c6
Make urclock.c iron out a bug in some bootloaders 2022-11-09 21:00:16 +00:00
Stefan Rueger
d5d0b940cc
Harden vector bootloaders more against reset overwrites 2022-11-09 19:28:29 +00:00
Stefan Rueger
84a3e2cc2b
Fix avr.c comment 2022-11-09 19:27:34 +00:00
Stefan Rueger
c7ba53bca0
Harden urclock against terminal time outs and vector overwrites 2022-11-09 16:16:59 +00:00
Stefan Rueger
ea65918dca
Omit verify after write failure in term.c 2022-11-09 15:43:57 +00:00
Stefan Rueger
20b86fb739
Warn in uclock when bootloader cannot read/write memories 2022-11-08 20:16:05 +00:00
Stefan Rueger
6a6d333849
Update urclock documentation 2022-11-08 15:18:30 +00:00
Stefan Rueger
cf3c81f714
Update urclock's -x parameters 2022-11-07 18:01:23 +00:00
0212ed9e4e linixgpio: retrie 100 times to open the pins
On a Raspberry Pi 2B udev takes a while longer to grant permissions to
the sysfs gpio interface.  This patch tries 10 times more often.
Without this patch the tools works only with root permissions.
2022-11-07 13:36:30 +00:00
Stefan Rueger
715db4c690
Make -A default for urclock programmer 2022-11-07 02:43:34 +00:00
Stefan Rueger
21d93ec8cb
Update urclock programmer 2022-11-07 01:26:47 +00:00
Stefan Rueger
e6c26d8db4
Provide urclock programmer 2022-11-06 01:29:07 +00:00
Stefan Rueger
4c92030e3a
Update NEWS 2022-11-01 18:20:06 +00:00
Stefan Rueger
d211c4e5f5
Merge pull request #1164 from MCUdude/hvupdi-type2-fix
Fix Type 2 HV UPDI
2022-11-01 18:17:52 +00:00
Stefan Rueger
02fe08aed2
Open programmer before allocating part
So any programmer that knows exactly which part it is connected to
can set the -p part option should the user not have done so.

Also no longer exits main without closing open programmer.
2022-11-01 18:12:00 +00:00
MCUdude
577ee72db7 Fix Type 2 HV UPDI
Used on AVR-DD and AVR-Ex targets
2022-10-31 11:06:14 +01:00
Stefan Rueger
b5699663c4
Update NEWS 2022-10-29 11:05:25 +01:00
Stefan Rueger
50046da923
Merge pull request #1151 from dbuchwald/serialupdi_page_erase
Implementation of SerialUPDI page erase operation
2022-10-29 11:02:17 +01:00
Stefan Rueger
a3c04d294e
Merge pull request #1156 from mcuee/readline_macos
Readline macos
2022-10-29 11:00:06 +01:00
Stefan Rueger
d87eb14dc9
Make -p variable partdesc global 2022-10-29 10:55:58 +01:00
Stefan Rueger
87df3216cb
Make fileio() and do_op() arguments const where possible 2022-10-29 10:48:47 +01:00
Stefan Rueger
a1018999c4
Correct plural for message writing %d bytes in term.c 2022-10-26 08:42:03 +01:00
Stefan Rueger
418cf08e84
Change avrdude.conf.in comment on location of per-user config file 2022-10-25 18:13:28 +01:00
mcuee
5862a5b7e9
Use readline for github action macOS Homebrew
Update github action to use readline keg and not the default libedit under Homebrew
2022-10-24 08:50:57 +08:00
mcuee
79c43789a9
Update build.sh to use readline keg
For macOS Homebrew, readline is a keg. This change makes avrdude uses readline keg.
2022-10-24 08:47:02 +08:00
mcuee
f2a413d2dc
Merge branch 'avrdudes:main' into Xplained_Pro_PDI 2022-10-24 07:57:55 +08:00
Stefan Rueger
1dba916e06
Update NEWS 2022-10-23 23:33:56 +01:00
Stefan Rueger
3769332afd
Merge pull request #1142 from MCUdude/stk600-pdi
STK600 supports programming using PDI
2022-10-23 23:10:10 +01:00
Stefan Rueger
ec1e7156bd
Merge pull request #1154 from avrdudes/revert-1148-readline_mingw
Revert "Add readline for MSYS2 mingw32/mingw64 build"
2022-10-23 23:09:18 +01:00
Stefan Rueger
960bf7b959
Revert "Add readline for MSYS2 mingw32/mingw64 build" 2022-10-23 23:04:16 +01:00
Stefan Rueger
0ebf220315
Merge pull request #1148 from mcuee/readline_mingw
Add readline for MSYS2 mingw32/mingw64 build
2022-10-23 22:42:10 +01:00
Stefan Rueger
b1b4a180ba
Merge pull request #1146 from mcuee/readline_action
Add libreadline-dev for Linux github action build
2022-10-23 22:39:54 +01:00
Stefan Rueger
ae5b460859
Merge pull request #1141 from stefanrueger/paged
Always use paged access for programmers that serve bootloaders
2022-10-23 22:33:31 +01:00
Stefan Rueger
baaad71aa5
Support optiboot, optiboot_dx and optiboot_x bootloaders for -c arduino (#1140)
* If bootloaders are served, send word addresses for classic parts and
  byte addresses for newer parts, eg, UPDI and PDI
* Load ext addr for stk500v1 bootloaders after grazing 64k boundaries
* Fix bootloader stk500v1 EEPROM r/w for classic parts with page size 1
2022-10-23 22:32:29 +01:00
Stefan Rueger
16922842be
Improve -B bitclock documentation 2022-10-23 22:26:07 +01:00
Stefan Rueger
2c7083f001
Merge pull request #1139 from steelman/isp-clock-error-message
Mention -B in the error message and document -F better
2022-10-23 21:59:21 +01:00
Stefan Rueger
4f6bab6303
Merge pull request #1138 from MCUdude/pic-detect-mode-cherry
Detect PICkit4 and SNAP in PIC mode
2022-10-23 21:57:26 +01:00
Stefan Rueger
5b008a04cf
Revamp terminal output: progress bar, callback and stdout/stderr (#1132)
* Print parms output to stdout
* Flush terminal writes and other minor changes
* Prepare terminal for periodic calls to programmer to reset bootloader WDT
* Only show progress reports for memories > 32 bytes or on -vv
* Freeze progress bar on serious error
* Allow cached r/w byte routines to be used in pgm->read_byte and pgm->write_byte
2022-10-23 21:56:45 +01:00
Dawid Buchwald
fa1c081a94 Implemented page erase operation for SerialUPDI 2022-10-23 15:06:06 +02:00
Dawid Buchwald
2230c05871
Merge pull request #1 from avrdudes/main
Merge latest avrdudes/avrdude main branch
2022-10-23 13:56:52 +02:00
mcuee
e300861505
Add readline for MSYS2 mingw32/mingw64 build 2022-10-23 14:40:04 +08:00
mcuee
4a5efa7635
Add xplainedpro_pdi programmer
This will fix https://github.com/avrdudes/avrdude/issues/1143.

Xplained Pro should be able to support PDI mode as per the documentation.

Reference: take note that the following document does not cover UPDI support.
https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42096-Microcontrollers-Embedded-Debugger_User-Guide.pdf

Reference discussion:
* https://github.com/avrdudes/avrdude/pull/1139#issuecomment-1286760773
* https://github.com/avrdudes/avrdude/discussions/1019#discussioncomment-3569440
2022-10-23 14:24:57 +08:00
mcuee
21e372f639
Add libreadline-dev for Linux github action build 2022-10-23 14:03:33 +08:00
MCUdude
992e9666a3 STK600 supports programming using PDI 2022-10-22 12:51:03 +02:00
Łukasz Stelmach
c890ff90eb Mention -B in the error message
One of possible problems of failed initialization is too hight frequency
of ISP clock. Mention using -B option as a possible solution.

Closes #1133
2022-10-21 02:33:34 +02:00
Stefan Rueger
b9396bcd02
Always use paged access for programmers that serve bootloaders 2022-10-21 00:56:43 +01:00
Łukasz Stelmach
9977f1ed12 Document meaning of -F during initialization 2022-10-20 19:52:35 +02:00
MCUdude
72da5c73db Fix formatting and replace tabs with spaces 2022-10-20 12:39:11 +02:00
MCUdude
867d83c215 Print error message if no HID device is connected when using hidapi 2022-10-20 12:27:59 +02:00
MCUdude
14446950df Check for PICkit4 or SNAP in PIC mode 2022-10-20 12:19:10 +02:00
MCUdude
b083416e3b Let Avrdude use the valid SNAP USB PID first 2022-10-20 12:19:10 +02:00
MCUdude
13817459e1 Add missing USB VID/PIDs 2022-10-20 12:19:10 +02:00
MCUdude
c999083b8f Change message type from error to warning and add additional USB info 2022-10-20 12:18:42 +02:00
616 changed files with 218770 additions and 102416 deletions

92
.github/workflows/arduino_packing.yml vendored Normal file
View file

@ -0,0 +1,92 @@
name: avrdude_packing
env:
# The name of the project
PROJECT_NAME: avrdude
DIST_DIR: dist
ARTIFACT_NAME: dist
on:
label:
types:
- created
push:
branches:
- main
jobs:
build:
name: build (${{ matrix.config.os }}, ${{ matrix.config.arch }})
runs-on:
ubuntu-latest
strategy:
matrix:
config:
- os: Linux
arch: 64bit
cross_compile: x86_64-ubuntu16.04-linux-gnu
- os: Linux
arch: 32bit
cross_compile: i686-ubuntu16.04-linux-gnu
- os: Linux
arch: ARMv6
cross_compile: arm-linux-gnueabihf
- os: Linux
arch: ARM64
cross_compile: aarch64-linux-gnu
- os: macOS
arch: 64bit
cross_compile: x86_64-apple-darwin13
cross_compiler: o64-clang
ar: /opt/osxcross/target/bin/x86_64-apple-darwin13-ar # we have to manually specify the full path otherwise it's not found for some reason
ld: /opt/osxcross/target/bin/x86_64-apple-darwin13-ld
- os: Windows
arch: 32bit
cross_compile: i686-w64-mingw32
extension: .exe
container:
image: ghcr.io/arduino/crossbuild:0.2.2
steps:
- name: Checkout avrdude repository
uses: actions/checkout@v3
with:
repository: avrdudes/avrdude
path: ${{ env.PROJECT_NAME }}
- name: replace system ranlib with darwin one
# for some reason is not possible to override ranlib with env vars, so this is ugly but it's the only way I found
if: matrix.config.os == 'macOS'
run: |
mv /usr/bin/ranlib /usr/bin/ranlib.bk
ln -s /opt/osxcross/target/bin/${{ matrix.config.cross_compile }}-ranlib /usr/bin/ranlib
- name: Build Avrdude
working-directory: ${{ env.PROJECT_NAME }}
run: |
if [ "${{ matrix.config.os }}" = "macOS" ]; then
# For darwin we disable the static flags (not supported by clang) and we make some adjustments
cmake -DCMAKE_C_COMPILER=${{ matrix.config.cross_compiler }} -DCMAKE_CXX_COMPILER=${{ matrix.config.cross_compiler }}++ -DCMAKE_AR=${{ matrix.config.ar }} -DCMAKE_LINKER=${{ matrix.config.ld}} -DCMAKE_EXE_LINKER_FLAGS="-L/opt/lib/${{ matrix.config.cross_compile }}/lib/" -DCMAKE_C_FLAGS="-I/opt/lib/${{ matrix.config.cross_compile }}/include -pthread -framework Foundation -framework IOKit -framework Cocoa -framework Security -DHAVE_USB_H" -DCMAKE_PREFIX_PATH=/opt/lib/${{ matrix.config.cross_compile }}/ -DHAVE_LIBFTDI="NO" -DUSE_STATIC_LIBS="ON" -B build/
else
cmake -DCMAKE_C_COMPILER=${{ matrix.config.cross_compile }}-gcc -DCMAKE_CXX_COMPILER=${{ matrix.config.cross_compile }}-g++ -DCMAKE_EXE_LINKER_FLAGS="-static-libgcc -static-libstdc++" -DCMAKE_C_FLAGS="-I/opt/lib/${{ matrix.config.cross_compile }}/include/libusb-1.0/ -I/opt/lib/${{ matrix.config.cross_compile }}/include -pthread" -DCMAKE_PREFIX_PATH=/opt/lib/${{ matrix.config.cross_compile }}/ -DHAVE_LIBFTDI="NO" -B build/
fi
cmake --build build/ -v
- name: Package
working-directory: ${{ env.PROJECT_NAME }}
run: | # we need to create the subdir where to place binaries
mkdir -p ${{ env.PROJECT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }}/bin ${{ env.PROJECT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }}/etc
chmod +x build/src/${{ env.PROJECT_NAME }}${{ matrix.config.extension }}
mv -v build/src/${{ env.PROJECT_NAME }}${{ matrix.config.extension }} ${{ env.PROJECT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }}/bin
mv -v build/src/${{ env.PROJECT_NAME }}.conf ${{ env.PROJECT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }}/etc
mv -v COPYING ${{ env.PROJECT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }}/LICENSE.txt
tar -czv ${{ env.PROJECT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }} -f ${{ env.PROJECT_NAME }}_${GITHUB_REF##*/}_${{ matrix.config.os }}_${{ matrix.config.arch }}.tar.gz
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
if-no-files-found: error
name: ${{ env.ARTIFACT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }}
path: ${{ env.PROJECT_NAME }}/${{ env.PROJECT_NAME }}_*

View file

@ -0,0 +1,84 @@
name: avrdude_packing_release
env:
# The name of the project
PROJECT_NAME: avrdude
DIST_DIR: dist
ARTIFACT_NAME: dist
on:
push:
tags:
- "v[0-9]+.[0-9]+*"
jobs:
build:
name: build (${{ matrix.config.os }}, ${{ matrix.config.arch }})
runs-on:
ubuntu-latest
strategy:
matrix:
config:
- os: Linux
arch: 64bit
cross_compile: x86_64-ubuntu16.04-linux-gnu
- os: Linux
arch: 32bit
cross_compile: i686-ubuntu16.04-linux-gnu
- os: Linux
arch: ARMv6
cross_compile: arm-linux-gnueabihf
- os: Linux
arch: ARM64
cross_compile: aarch64-linux-gnu
- os: macOS
arch: 64bit
cross_compile: x86_64-apple-darwin13
cross_compiler: o64-clang
ar: /opt/osxcross/target/bin/x86_64-apple-darwin13-ar # we have to manually specify the full path otherwise it's not found for some reason
ld: /opt/osxcross/target/bin/x86_64-apple-darwin13-ld
- os: Windows
arch: 32bit
cross_compile: i686-w64-mingw32
extension: .exe
container:
image: ghcr.io/arduino/crossbuild:0.2.2
steps:
- name: Checkout avrdude repository
uses: actions/checkout@v3
- name: replace system ranlib with darwin one
# for some reason is not possible to override ranlib with env vars, so this is ugly but it's the only way I found
if: matrix.config.os == 'macOS'
run: |
mv /usr/bin/ranlib /usr/bin/ranlib.bk
ln -s /opt/osxcross/target/bin/${{ matrix.config.cross_compile }}-ranlib /usr/bin/ranlib
- name: Build Avrdude
run: |
if [ "${{ matrix.config.os }}" = "macOS" ]; then
# For darwin we disable the static flags (not supported by clang) and we make some adjustments
cmake -DCMAKE_C_COMPILER=${{ matrix.config.cross_compiler }} -DCMAKE_CXX_COMPILER=${{ matrix.config.cross_compiler }}++ -DCMAKE_AR=${{ matrix.config.ar }} -DCMAKE_LINKER=${{ matrix.config.ld}} -DCMAKE_EXE_LINKER_FLAGS="-L/opt/lib/${{ matrix.config.cross_compile }}/lib/" -DCMAKE_C_FLAGS="-I/opt/lib/${{ matrix.config.cross_compile }}/include -pthread -framework Foundation -framework IOKit -framework Cocoa -framework Security -DHAVE_USB_H" -DCMAKE_PREFIX_PATH=/opt/lib/${{ matrix.config.cross_compile }}/ -DHAVE_LIBFTDI="NO" -DUSE_STATIC_LIBS="ON" -B build/
else
cmake -DCMAKE_C_COMPILER=${{ matrix.config.cross_compile }}-gcc -DCMAKE_CXX_COMPILER=${{ matrix.config.cross_compile }}-g++ -DCMAKE_EXE_LINKER_FLAGS="-static-libgcc -static-libstdc++" -DCMAKE_C_FLAGS="-I/opt/lib/${{ matrix.config.cross_compile }}/include/libusb-1.0/ -I/opt/lib/${{ matrix.config.cross_compile }}/include -pthread" -DCMAKE_PREFIX_PATH=/opt/lib/${{ matrix.config.cross_compile }}/ -DHAVE_LIBFTDI="NO" -B build/
fi
cmake --build build/ -v
- name: Package
run: | # we need to create the subdir where to place binaries
mkdir -p ${{ env.PROJECT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }}/bin ${{ env.PROJECT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }}/etc
chmod +x build/src/${{ env.PROJECT_NAME }}${{ matrix.config.extension }}
mv -v build/src/${{ env.PROJECT_NAME }}${{ matrix.config.extension }} ${{ env.PROJECT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }}/bin
mv -v build/src/${{ env.PROJECT_NAME }}.conf ${{ env.PROJECT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }}/etc
mv -v COPYING ${{ env.PROJECT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }}/LICENSE.txt
tar -czv ${{ env.PROJECT_NAME }}_${{ matrix.config.os }}_${{ matrix.config.arch }} -f ${{ env.PROJECT_NAME }}_${GITHUB_REF##*/}_${{ matrix.config.os }}_${{ matrix.config.arch }}.tar.gz
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
if-no-files-found: error
name: ${{ env.ARTIFACT_NAME }}
path: avrdude_*

View file

@ -31,10 +31,63 @@ env:
BUILD_TYPE: RelWithDebInfo
jobs:
linux-x86_64-autotools:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install prerequisites
run: >-
sudo apt-get update
sudo apt-get install -y
build-essential
automake
libtool
flex
bison
libelf-dev
libusb-dev
libusb-1.0-0-dev
libhidapi-dev
libftdi1-dev
libreadline-dev
libserialport-dev
libgpiod-dev
texinfo
texlive
texi2html
- name: Configure
run: >-
autoreconf -vis src
mkdir _ambuild && cd _ambuild
../src/configure
--enable-option-checking=fatal
--enable-doc
--enable-parport
--enable-linuxgpio
--enable-linuxspi
- name: Build
run: make -C _ambuild -j$(nproc)
- name: "avrdude -? (not installed)"
run: _ambuild/avrdude -?
- name: "Dryrun test (not installed)"
run: printf "\n\n" | ./tools/test-avrdude -v -e _ambuild/avrdude -c '-C _ambuild/avrdude.conf' -d0 -p"-cdryrun -pm2560" -p"-cdryrun -pavr64du28"
- name: Install
run: sudo make -C _ambuild install
- name: "Dryrun test (installed)"
run: >-
export LD_LIBRARY_PATH="/usr/local/lib";
printf "\n\n" | ./tools/test-avrdude -v -d0 -p"-cdryrun -pm2560" -p"-cdryrun -pavr64du28"
# Re-enable distcheck after the doc fixes
# - name: distcheck
# run: make -C _ambuild -j$(nproc) distcheck "DISTCHECK_CONFIGURE_FLAGS=--disable-doc"
linux-x86_64:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Install prerequisites
run: >-
sudo apt-get update
@ -49,6 +102,9 @@ jobs:
libusb-1.0-0-dev
libhidapi-dev
libftdi1-dev
libreadline-dev
libserialport-dev
libgpiod-dev
texinfo
texlive
texi2html
@ -57,15 +113,24 @@ jobs:
cmake
-D BUILD_DOC=1
-D DEBUG_CMAKE=1
-D HAVE_PARPORT=1
-D HAVE_LINUXGPIO=1
-D HAVE_LINUXSPI=1
-D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
-B build
- name: Build
run: cmake --build build
- name: "avrdude -? (not installed)"
run: build/src/avrdude -?
- name: "Dryrun test (not installed)"
run: printf "\n\n" | ./tools/test-avrdude -v -e build/src/avrdude -c '-C build/src/avrdude.conf' -d0 -p"-cdryrun -pm2560" -p"-cdryrun -pavr64du28"
- name: Install
run: sudo cmake --build build --target install
- name: "Dryrun test (installed)"
run: printf "\n\n" | ./tools/test-avrdude -v -d0 -p"-cdryrun -pm2560" -p"-cdryrun -pavr64du28"
- name: Archive build artifacts
if: always()
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: build-linux-x86_64
path: |
@ -73,7 +138,7 @@ jobs:
!**/*.d
!**/*.o
- name: Archive executables
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: avrdude-linux-x86_64
path: |
@ -90,7 +155,7 @@ jobs:
- { arch: armhf, processor: armhf, prefix: arm-linux-gnueabihf, inc-lib: arm-linux-gnueabihf }
- { arch: arm64, processor: aarch64, prefix: aarch64-linux-gnu, inc-lib: aarch64-linux-gnu }
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Add architecture
run: |
dpkg --add-architecture ${{matrix.arch}}
@ -110,10 +175,14 @@ jobs:
libusb-1.0-0-dev:${{matrix.arch}}
libhidapi-dev:${{matrix.arch}}
libftdi1-dev:${{matrix.arch}}
libreadline-dev:${{matrix.arch}}
libserialport-dev:${{matrix.arch}}
libgpiod-dev:${{matrix.arch}}
- name: Configure
run: >-
cmake
-D DEBUG_CMAKE=1
-D HAVE_PARPORT=1
-D HAVE_LINUXGPIO=1
-D HAVE_LINUXSPI=1
-D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
@ -126,9 +195,12 @@ jobs:
-B build
- name: Build
run: cmake --build build
- name: "avrdude -? (not installed)"
if: matrix.arch == 'i386'
run: build/src/avrdude -?
- name: Archive build artifacts
if: always()
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: build-linux-${{matrix.processor}}
path: |
@ -136,7 +208,7 @@ jobs:
!**/*.d
!**/*.o
- name: Archive executables
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: avrdude-linux-${{matrix.processor}}
path: |
@ -146,32 +218,48 @@ jobs:
macos-x86_64:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Original PATH and build tools
run: |
echo "PATH=$PATH"
for b in bison flex pkg-config; do type "$b"; done
- name: Install prerequisites
run: >-
brew update
brew install
cmake
flex
bison
libelf
libusb
libusb-compat
hidapi
libftdi
readline
libserialport
- name: Configure environment to use brew kegs for flex and bison
run: |
echo "PATH=/opt/homebrew/opt/flex/bin:/opt/homebrew/opt/bison/bin:$PATH" >> $GITHUB_ENV
- name: post-brew PATH and build tools
run: |
echo "PATH=$PATH"
for b in bison flex pkg-config; do type "$b"; done
- name: Configure
run: >-
cmake
-D CMAKE_C_FLAGS=-I/usr/local/include
-D CMAKE_EXE_LINKER_FLAGS=-L/usr/local/Cellar
-D CMAKE_C_FLAGS="-I/opt/homebrew/include -I/opt/homebrew/opt/flex/include"
-D CMAKE_EXE_LINKER_FLAGS="-L/opt/homebrew/Cellar -L/opt/homebew/opt/flex/lib"
-D DEBUG_CMAKE=1
-D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
-B build
- name: Build
run: cmake --build build
- name: "avrdude -? (not installed)"
run: build/src/avrdude -?
- name: "Dryrun test (not installed)"
run: printf "\n\n" | ./tools/test-avrdude -v -e build/src/avrdude -c '-C build/src/avrdude.conf' -d0 -p"-cdryrun -pm2560" -p"-cdryrun -pavr64du28"
- name: Archive build artifacts
if: always()
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: build-macos-x86_64
path: |
@ -179,13 +267,61 @@ jobs:
!**/*.d
!**/*.o
- name: Archive executables
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: avrdude-macos-x86_64
path: |
build/src/avrdude
build/src/avrdude.conf
macos-x86_64-autotools:
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- name: Original PATH and build tools
run: |
echo "PATH=$PATH"
for b in bison flex pkg-config; do type "$b"; done
- name: Install prerequisites
run: >-
brew install
automake
autoconf
libtool
gettext
flex
bison
libelf
libusb
hidapi
libftdi
readline
libserialport
- name: Configure environment to use brew kegs for flex and bison
run: |
echo "PATH=/opt/homebrew/opt/flex/bin:/opt/homebrew/opt/bison/bin:$PATH" >> $GITHUB_ENV
- name: post-brew PATH and build tools
run: |
echo "PATH=$PATH"
for b in bison flex pkg-config; do type "$b"; done
- name: Configure
run: >-
./src/bootstrap
mkdir _ambuild && cd _ambuild
CFLAGS="-I/opt/homebrew/include -I/opt/homebrew/opt/flex/include"
LDFLAGS="-L/opt/homebrew/lib -L/opt/homebrew/opt/bison/lib"
../src/configure
--enable-option-checking=fatal
- name: Build
run: make -C _ambuild -j$(nproc)
- name: "avrdude -? (not installed)"
run: _ambuild/avrdude -?
- name: "Dryrun test (not installed)"
run: printf "\n\n" | ./tools/test-avrdude -v -e _ambuild/avrdude -c '-C _ambuild/avrdude.conf' -d0 -p"-cdryrun -pm2560" -p"-cdryrun -pavr64du28"
msvc:
runs-on: windows-latest
strategy:
@ -195,7 +331,7 @@ jobs:
- { arch: x64, platform: x64 }
- { arch: arm64, platform: ARM64 }
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Install prerequisites
# As Chocolatey is notoriously unreliable, install winflexbison3 directly from GitHub.
# run: choco install winflexbison3
@ -212,14 +348,27 @@ jobs:
-D CMAKE_C_FLAGS_RELWITHDEBINFO="/MT /GL /Zi /O2 /Ob1 /DNDEBUG"
-D CMAKE_CXX_FLAGS_RELWITHDEBINFO="/MT /GL /Zi /O2 /Ob1 /DNDEBUG"
-D CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO="/DEBUG /INCREMENTAL:NO /LTCG /OPT:REF /OPT:ICF"
-D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
-D USE_EXTERNAL=1
-D HAVE_LIBREADLINE=HAVE_LIBREADLINE-NOTFOUND
-D USE_EXTERNAL_LIBS=1
-B build
- name: Build
run: cmake --build build --config ${{env.BUILD_TYPE}}
- name: "avrdude -? (not installed)"
# FIXME: Skip running avrdude.
# The exe file on arm64 is not runnable - x86_64 perhaps?
if: matrix.arch != 'arm64'
run: build/src/${{env.BUILD_TYPE}}/avrdude.exe -?
- name: "Dryrun test (not installed)"
# FIXME: Skip running avrdude.
# The exe file on arm64 is not runnable - x86_64 perhaps?
if: matrix.arch != 'arm64'
run: |
$tmp = [System.IO.Path]::GetTempPath()
$tmp_slash = $tmp -replace '\\', '/'
Write-Host "`n`n" -NoNewline | bash tools/test-avrdude -v -t "$tmp_slash" -e build/src/${{env.BUILD_TYPE}}/avrdude.exe -c "-C build/src/avrdude.conf" -d0 -p"-cdryrun -pm2560" -p"-cdryrun -pavr64du28"
- name: Archive build artifacts
if: always()
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: build-msvc-${{matrix.arch}}
path: |
@ -228,10 +377,10 @@ jobs:
!**/*.obj
- name: Move executables
run: |
mv build/src/RelWithDebInfo/avrdude.exe build/src
mv build/src/RelWithDebInfo/avrdude.pdb build/src
mv build/src/${{env.BUILD_TYPE}}/avrdude.exe build/src
mv build/src/${{env.BUILD_TYPE}}/avrdude.pdb build/src
- name: Archive executables
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: avrdude-msvc-${{matrix.arch}}
path: |
@ -247,10 +396,11 @@ jobs:
strategy:
matrix:
include:
- { sys: mingw32, env: i686 }
- { sys: mingw64, env: x86_64 }
- { sys: ucrt64, env: ucrt-x86_64 }
- { sys: clang64, env: clang-x86_64 }
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- uses: msys2/setup-msys2@v2
with:
msystem: ${{matrix.sys}}
@ -259,11 +409,17 @@ jobs:
base-devel
mingw-w64-${{matrix.env}}-gcc
mingw-w64-${{matrix.env}}-cmake
mingw-w64-${{matrix.env}}-python
mingw-w64-${{matrix.env}}-swig
mingw-w64-${{matrix.env}}-libelf
mingw-w64-${{matrix.env}}-libusb
mingw-w64-${{matrix.env}}-libusb-compat-git
mingw-w64-${{matrix.env}}-hidapi
mingw-w64-${{matrix.env}}-libftdi
mingw-w64-${{matrix.env}}-libserialport
mingw-w64-${{matrix.env}}-readline
mingw-w64-${{matrix.env}}-ncurses
mingw-w64-${{matrix.env}}-termcap
- name: Configure
run: >-
cmake
@ -273,15 +429,20 @@ jobs:
-B build
- name: Build
run: cmake --build build
- name: "avrdude -? (not installed)"
run: build/src/avrdude -?
# Disabled so far due to problems writing to temp files.
# - name: "Dryrun test (not installed)"
# run: printf "\n\n" | ./tools/test-avrdude -v -e build/src/avrdude.exe -c "-C build/src/avrdude.conf" -d0 -p"-cdryrun -pm2560" -p"-cdryrun -pavr64du28"
- name: Archive build artifacts
if: always()
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: build-mingw-${{matrix.env}}
path: |
build/
- name: Archive executables
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: avrdude-mingw-${{matrix.env}}
path: |

42
.github/workflows/check-sourcecode.yml vendored Normal file
View file

@ -0,0 +1,42 @@
name: "Check Sourcecode"
on:
push:
branches-ignore:
- 'onlinedocs'
pull_request:
branches-ignore:
- 'onlinedocs'
jobs:
check-sourcecode:
name: "Check Sourcecode"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# - name: Install prerequisites
- name: "Check the sourcecode"
run: ./tools/check-sourcecode
check-generated:
name: "Check Generated Files"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install prerequisites
run: >-
sudo apt-get update
sudo apt-get install -y
asciidoctor
- name: "Verify elf2tag.1 consistency"
run: ./src/update-elf2tag-manpage --verify

View file

@ -76,10 +76,3 @@ jobs:
asset_path: ./asset.zip
asset_name: avrdude-${{github.ref_name}}-windows-${{matrix.arch}}.zip
asset_content_type: application/zip
#deploy:
# needs: [asset-msvc]
# runs-on: ubuntu-latest
# steps:
# - name: Create package (Chocolatey)
# run: echo TODO

8
.gitignore vendored
View file

@ -40,6 +40,11 @@ ltmain.sh
ylwrap
tags
cscope.out
/src/avrdude-[1-9].[0-9].tar.*
/src/avrdude-[1-9].[0-9]/
/src/avrdude-[1-9].[0-9]-20[0-9][0-9][01][0-9][0-3][0-9].tar.*
/src/avrdude-[1-9].[0-9]-20[0-9][0-9][01][0-9][0-3][0-9]/
/src/GNUmakefile
*.o
*.lo
@ -50,6 +55,9 @@ cscope.out
out/
build/
build_*/
CMakeFiles/
/CMakeCache.txt
cmake_install.cmake
# Visual Studio
.vs/

37
AUTHORS
View file

@ -2,33 +2,59 @@ AVRDUDE was written by:
Brian S. Dean <bsd@bdmicro.com>
AVRDUDE is currently maintained by:
Hans Eirik Bull
Stefan Rueger
Xiaofan Chen
Joerg Wunsch
Contributors:
Joerg Wunsch <j@uriah.heep.sax.de>
Eric Weddington <ericw@evcohs.com>
Eric B. Weddington <ericw@evcohs.com>
Martin J. Thomas <mthomas@rhrk.uni-kl.de>
Theodore A. Roth <troth@openavr.org>
Erik Walthinsen
Jan-Hinnerk Reichert <hinni@despammed.com>
Alex Shepherd <maillists@ajsystems.co.nz>
Martin Thomas <mthomas@rhrk.uni-kl.de>
Theodore A. Roth <troth@openavr.org>
Juliane Holzt <avrdude@juliane.holzt.de>
Colin O'Flynn <coflynn@newae.com>
Thomas Fischl <tfischl@gmx.de>
David Hoerl <dhoerl@mac.com>
Christian Starkjohann
David Moore
David Brownell
Dick Streefland
Limor Fried
Klaus Leidinger <klaus@mikrocontroller-projekte.de>
Lars Immisch
Michal Ludvig <mludvig@logix.net.nz>
Roger E. Wolff <R.E.Wolff@BitWizard.nl>
Darell Tan <darell.tan@gmail.com>
Brett Hagman <bhagman@roguerobotics.com>
Wolfgang Moser
Ville Voipio
Hannes Weisbach
Doug Springer
Brett Hagman <bhagman@roguerobotics.com>
Rene Liebscher <r.liebscher@gmx.de>
Jim Paris <jim@jtan.com>
Jan Egil Ruud <janegil.ruud@microchip.com>
David Mosberger <davidm@egauge.net>
Kirill Levchenko
Kevin Cuzner <kevin@kevincuzner.com>
David Sainty
Alexey Sadkov
Marius Greuel <greuelm@mgtek.com>
Ralf Ramsauer <ralf@vmexit.de>
Dawid Buchwald <dawid.buchwald@hotmail.com>
Hans Eirik Bull
Stefan Rueger
Xiaofan Chen
Jeff Kent
Sebastian Kuzminsky <seb@highlab.com>
Sydney Louisa Wilke <git@funkeleinhorn.com>
MX682X
Contributors to code no longer present:
@ -36,5 +62,4 @@ Contributors to code no longer present:
Paula Tomlinson for the loaddrv sources
Chris Liechti for loaddrv modifications
For minor contributions, please see the ChangeLog files.
For minor contributions, please see the ChangeLog files / Git log.

View file

@ -20,17 +20,17 @@
# cmake -B build
# cmake --build build
cmake_minimum_required(VERSION 3.12)
project(avrdude VERSION 7.0 LANGUAGES C)
cmake_minimum_required(VERSION 3.14)
project(avrdude VERSION 8.0 LANGUAGES C)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED True)
option(BUILD_DOC "Enable building documents" OFF)
option(HAVE_LINUXGPIO "Enable Linux sysfs GPIO support" OFF)
option(HAVE_LINUXGPIO "Enable Linux sysfs and libgpiod GPIO support" OFF)
option(HAVE_LINUXSPI "Enable Linux SPI support" OFF)
option(HAVE_PARPORT "Enable parallel port support" OFF)
option(USE_EXTERNAL "Use external libraries from AVRDUDE GitHub repositories" OFF)
option(USE_EXTERNAL_LIBS "Use external libraries from AVRDUDE GitHub repositories" OFF)
option(USE_LIBUSBWIN32 "Prefer libusb-win32 over libusb" OFF)
option(DEBUG_CMAKE "Enable debugging output for this CMake project" OFF)
option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
@ -49,7 +49,7 @@ include(FindPackageMessage)
include(GNUInstallDirs)
set(CONFIG_DIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}")
set(AVRDUDE_FULL_VERSION ${CMAKE_PROJECT_VERSION})
set(AVRDUDE_FULL_VERSION "${CMAKE_PROJECT_VERSION}${EXTRA_VERSION_SUFFIX}")
# =====================================
# Get Git commit info
@ -69,14 +69,14 @@ if(Git_FOUND)
)
execute_process(
COMMAND "${GIT_EXECUTABLE}" log -1 --format=%ad --date=format:%Y%m%d
COMMAND "${GIT_EXECUTABLE}" log -1 --format=%cd --date=format:%Y%m%d
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
OUTPUT_VARIABLE GIT_COMMIT_DATE
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
)
execute_process(
COMMAND "${GIT_EXECUTABLE}" log -1 --format=%ad --date=format:%Y
COMMAND "${GIT_EXECUTABLE}" log -1 --format=%cd --date=format:%Y
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
OUTPUT_VARIABLE GIT_COMMIT_YEAR
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
@ -91,7 +91,7 @@ if(Git_FOUND)
# If the commit is not tagged, include the date and commit hash in the full version string.
if(NOT GIT_COMMIT_HASH STREQUAL GIT_TAG_HASH)
set(AVRDUDE_FULL_VERSION "${CMAKE_PROJECT_VERSION}-${GIT_COMMIT_DATE} (${GIT_COMMIT_HASH})")
set(AVRDUDE_FULL_VERSION "${CMAKE_PROJECT_VERSION}-${GIT_COMMIT_DATE}${EXTRA_VERSION_SUFFIX} (${GIT_COMMIT_HASH})")
endif()
endif()
@ -124,7 +124,8 @@ if(USE_STATIC_LIBS)
set(PREFERRED_LIBHIDAPI libhidapi.a libhidapi-libusb.a libhidapi-hidraw.a hidapi hidapi-libusb hidapi-hidraw)
set(PREFERRED_LIBFTDI libftdi.a ftdi)
set(PREFERRED_LIBFTDI1 libftdi1.a ftdi1)
set(PREFERRED_LIBREADLINE libreadline.a)
set(PREFERRED_LIBREADLINE libreadline.a readline)
set(PREFERRED_LIBSERIALPORT libserialport.a serialport)
else()
set(PREFERRED_LIBELF elf)
set(PREFERRED_LIBUSB usb)
@ -133,6 +134,7 @@ else()
set(PREFERRED_LIBFTDI ftdi)
set(PREFERRED_LIBFTDI1 ftdi1)
set(PREFERRED_LIBREADLINE readline)
set(PREFERRED_LIBSERIALPORT serialport)
endif()
# -------------------------------------
@ -189,11 +191,6 @@ endif()
# -------------------------------------
# Find libhidapi
find_library(HAVE_LIBHID NAMES hid)
if(HAVE_LIBHID)
set(LIB_LIBHID ${HAVE_LIBHID})
endif()
find_library(HAVE_LIBHIDAPI NAMES ${PREFERRED_LIBHIDAPI})
if(HAVE_LIBHIDAPI)
set(LIB_LIBHIDAPI ${HAVE_LIBHIDAPI})
@ -223,13 +220,83 @@ endif()
find_library(HAVE_LIBREADLINE NAMES ${PREFERRED_LIBREADLINE})
if(HAVE_LIBREADLINE)
set(LIB_LIBREADLINE ${HAVE_LIBREADLINE})
find_library(LIB_NCURSES NAMES ncurses pdcurses)
elseif(MSVC)
set(HAVE_LIBREADLINE 1)
endif()
#-------------------------------------
# Find libserialport
find_library(HAVE_LIBSERIALPORT NAMES ${PREFERRED_LIBSERIALPORT})
if(HAVE_LIBSERIALPORT)
set(LIB_LIBSERIALPORT ${HAVE_LIBSERIALPORT})
set(HAVE_LIBSERIALPORT 1)
endif()
# -------------------------------------
# Find libgpiod using pkg-config, if needed
if(HAVE_LINUXGPIO)
# defaults/fallbacks
set(HAVE_LIBGPIOD 0)
set(HAVE_LIBGPIOD_V2 0)
set(HAVE_LIBGPIOD_V1_6 0)
find_package(PkgConfig)
if(PKG_CONFIG_FOUND)
# check whether we have version >= 2.0
message(STATUS "Checking for module 'libgpiod'...")
pkg_check_modules(LIBGPIODV2 QUIET libgpiod>=2.0)
if(LIBGPIODV2_FOUND)
message(STATUS "Found module 'libgpiod' (found version \"${LIBGPIODV2_VERSION}\")")
set(HAVE_LIBGPIOD 1)
set(HAVE_LIBGPIOD_V2 1)
set(CMAKE_REQUIRED_LIBRARIES ${LIBGPIODV2_LIBRARIES})
set(LIB_LIBGPIOD ${LIBGPIODV2_LINK_LIBRARIES})
else()
# check whether we have version >= 1.6
pkg_check_modules(LIBGPIODV1_6 QUIET libgpiod>=1.6)
if(LIBGPIODV1_6_FOUND)
message(STATUS "Found module 'libgpiod' (found version \"${LIBGPIODV1_6_VERSION}\")")
set(HAVE_LIBGPIOD 1)
set(HAVE_LIBGPIOD_V1_6 1)
set(CMAKE_REQUIRED_LIBRARIES ${LIBGPIODV1_6_LIBRARIES})
set(LIB_LIBGPIOD ${LIBGPIODV1_6_LINK_LIBRARIES})
else()
# check whether we have at least an older version
pkg_check_modules(LIBGPIOD QUIET libgpiod)
if(LIBGPIOD_FOUND)
message(STATUS "Found module 'libgpiod' (found version \"${LIBGPIOD_VERSION}\")")
set(HAVE_LIBGPIOD 1)
set(CMAKE_REQUIRED_LIBRARIES ${LIBGPIOD_LIBRARIES})
set(LIB_LIBGPIOD ${LIBGPIOD_LINK_LIBRARIES})
else()
message(STATUS "Could not find module 'libgpiod', proceeding without.")
endif()
endif()
endif()
else()
message(WARNING "For using libgpiod, pkg-config would be required which is not available.")
endif()
endif()
# -------------------------------------
# Find SWIG
find_package(SWIG 4.0 COMPONENTS python)
if(SWIG_FOUND)
find_package(Python3 COMPONENTS Interpreter Development)
if(PYTHON3_FOUND)
set(HAVE_SWIG 1)
else()
message(STATUS "Found SWIG but no Python3 header/library; cannot use SWIG")
endif()
endif()
# =====================================
# Use external libraries if requested
# =====================================
if(USE_EXTERNAL)
if(USE_EXTERNAL_LIBS)
FetchContent_Declare(libelf
GIT_REPOSITORY https://github.com/avrdudes/libelf.git
GIT_TAG e5a39bf19bd6598c42e09172be5a78ceec2a065c
@ -242,12 +309,12 @@ if(USE_EXTERNAL)
FetchContent_Declare(libhidapi
GIT_REPOSITORY https://github.com/avrdudes/libhidapi.git
GIT_TAG e3700e951f762ef92871ff4fc94586e4d1c042a6
GIT_TAG d1307487973c857bc158e27ecc99644b2f5e68ea
)
FetchContent_Declare(libftdi
GIT_REPOSITORY https://github.com/avrdudes/libftdi.git
GIT_TAG f3a54da710002a7d25a32a69e667a69ef84cc120
GIT_TAG f9fe6e96b97c3a08efd081632c1859cb83aa14e3
)
message(STATUS "Fetching external libraries, please wait...")
@ -285,6 +352,14 @@ if(BUILD_DOC)
add_subdirectory(src/doc)
endif()
if(HAVE_PARPORT)
if(WIN32)
message(FATAL_ERROR "avrdude does not support parallel port on Windows")
elseif(APPLE)
message(FATAL_ERROR "avrdude does not support parallel port on Apple systems")
endif()
endif()
# =====================================
# Configuration
# =====================================
@ -298,18 +373,19 @@ if (DEBUG_CMAKE)
message(STATUS "CMAKE_FIND_ROOT_PATH: ${CMAKE_FIND_ROOT_PATH}")
message(STATUS "CMAKE_C_COMPILER: ${CMAKE_C_COMPILER}")
message(STATUS "CONFIG_DIR: ${CONFIG_DIR}")
message(STATUS "EXTRA_VERSION_SUFFIX: ${EXTRA_VERSION_SUFFIX}")
message(STATUS "AVRDUDE_FULL_VERSION: ${AVRDUDE_FULL_VERSION}")
message(STATUS "USE_EXTERNAL: ${USE_EXTERNAL}")
message(STATUS "USE_EXTERNAL_LIBS: ${USE_EXTERNAL_LIBS}")
message(STATUS "USE_LIBUSBWIN32: ${USE_LIBUSBWIN32}")
message(STATUS "HAVE_LIBELF: ${HAVE_LIBELF}")
message(STATUS "HAVE_LIBUSB: ${HAVE_LIBUSB}")
message(STATUS "HAVE_LIBUSB_1_0: ${HAVE_LIBUSB_1_0}")
message(STATUS "HAVE_LIBUSB_WIN32: ${HAVE_LIBUSB_WIN32}")
message(STATUS "HAVE_LIBHID: ${HAVE_LIBHID}")
message(STATUS "HAVE_LIBHIDAPI: ${HAVE_LIBHIDAPI}")
message(STATUS "HAVE_LIBFTDI: ${HAVE_LIBFTDI}")
message(STATUS "HAVE_LIBFTDI1: ${HAVE_LIBFTDI1}")
message(STATUS "HAVE_LIBREADLINE: ${HAVE_LIBREADLINE}")
message(STATUS "HAVE_LIBSERIALPORT: ${HAVE_LIBSERIALPORT}")
message(STATUS "HAVE_LIBELF_H: ${HAVE_LIBELF_H}")
message(STATUS "HAVE_LIBELF_LIBELF_H: ${HAVE_LIBELF_LIBELF_H}")
message(STATUS "HAVE_USB_H: ${HAVE_USB_H}")
@ -318,6 +394,9 @@ if (DEBUG_CMAKE)
message(STATUS "HAVE_LIBUSB_1_0_LIBUSB_H: ${HAVE_LIBUSB_1_0_LIBUSB_H}")
message(STATUS "HAVE_HIDAPI_HIDAPI_H: ${HAVE_HIDAPI_HIDAPI_H}")
message(STATUS "LIBUSB_COMPAT_DIR: ${LIBUSB_COMPAT_DIR}")
message(STATUS "LIBGPIODV2_FOUND: ${LIBGPIODV2_FOUND}")
message(STATUS "LIBGPIODV1_6_FOUND: ${LIBGPIODV1_6_FOUND}")
message(STATUS "LIBGPIOD_FOUND: ${LIBGPIOD_FOUND}")
message(STATUS "----------------------")
endif()
@ -361,6 +440,18 @@ else()
message(STATUS "DON'T HAVE libftdi1")
endif()
if(HAVE_LIBREADLINE)
message(STATUS "DO HAVE libreadline")
else()
message(STATUS "DON'T HAVE libreadline")
endif()
if(HAVE_LIBSERIALPORT)
message(STATUS "DO HAVE libserialport")
else()
message(STATUS "DON'T HAVE libserialport")
endif()
if(BUILD_DOC)
message(STATUS "ENABLED doc")
else()
@ -375,6 +466,15 @@ endif()
if(HAVE_LINUXGPIO)
message(STATUS "ENABLED linuxgpio")
if (LIBGPIODV2_FOUND)
message(STATUS "DO HAVE libgpiod (${LIBGPIODV2_VERSION})")
elseif(LIBGPIODV1_6_FOUND)
message(STATUS "DO HAVE libgpiod (${LIBGPIODV1_6_VERSION})")
elseif(LIBGPIOD_FOUND)
message(STATUS "DO HAVE libgpiod (${LIBGPIOD_VERSION})")
else()
message(STATUS "DON'T HAVE libgpiod")
endif()
else()
message(STATUS "DISABLED linuxgpio")
endif()
@ -385,4 +485,10 @@ else()
message(STATUS "DISABLED linuxspi")
endif()
if(HAVE_SWIG)
message(STATUS "DO HAVE swig+Python3")
else()
message(STATUS "DON'T HAVE swig+Python3")
endif()
message(STATUS "----------------------")

76
CMakeSettings.json Normal file
View file

@ -0,0 +1,76 @@
{
"configurations": [
{
"name": "x64-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [ "msvc_x64_x64" ],
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"variables": [
{
"name": "USE_EXTERNAL_LIBS",
"value": "true",
"type": "BOOL"
}
]
},
{
"name": "x64-Release",
"generator": "Ninja",
"configurationType": "RelWithDebInfo",
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "msvc_x64_x64" ],
"variables": [
{
"name": "USE_EXTERNAL_LIBS",
"value": "true",
"type": "BOOL"
}
]
},
{
"name": "x86-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "msvc_x86" ],
"variables": [
{
"name": "USE_EXTERNAL_LIBS",
"value": "true",
"type": "BOOL"
}
]
},
{
"name": "x86-Release",
"generator": "Ninja",
"configurationType": "RelWithDebInfo",
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "msvc_x86" ],
"variables": [
{
"name": "USE_EXTERNAL_LIBS",
"value": "true",
"type": "BOOL"
}
]
}
]
}

40
COPYING
View file

@ -1,12 +1,12 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@ -55,8 +55,8 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
@ -225,7 +225,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
@ -255,7 +255,7 @@ make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
@ -277,9 +277,9 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
@ -303,16 +303,16 @@ the "copyright" line and a pointer to where the full notice is found.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
@ -335,5 +335,5 @@ necessary. Here is a sample; alter the names:
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

737
NEWS
View file

@ -1,18 +1,648 @@
$Id$
Approximate change log for AVRDUDE by version.
(For detailed changes, see the version control system logs.)
----------------------------------------------------------------------
Changes since version 7.0:
Changes since version 8.0:
* Major changes compared to the previous version:
* New devices supported:
- AVR128DA28S, AVR128DA32S, AVR128DA48S, AVR128DA64S
- AVR64DA28S, AVR64DA32S, AVR64DA48S, AVR64DA64S
- AVR32DA28S, AVR32DA32S, AVR32DA48S
- AVR32EB14, AVR32EB20, AVR32EB28, AVR32EB32
- AVR32SD20, AVR32SD28, AVR32SD32
* New programmers supported:
- pickit5 = pickit5_jtag, pickit5_dw, pickit5_isp, pickit5_pdi, pickit5_tpi
- pickit_basic = pickit_basic_jtag, pickit_basic_updi, pickit_basic_isp,
pickit_basic_dw, pickit_basic_tpi, pickit_basic_pdi
* New serial adapters supported:
* Issues fixed:
- Missing devices in udev rules output? #1915
- AVR-Doper support has been broken since version 6.4 #1626
- CI: upload-artifacts@v3 fails #1944
- Linuxspi won't connect #1929
- Fails to build on Windows with recent clang #1940
- Support options such as --part #1922
* Pull requests:
- Add AVR128DAxxS parts #1918
- Update usbpids in avrdude.conf #1919
- Add extra version information to avrdude output #1927
- CI: Ensure only supported configure options are used
(--enable-option-checking=fatal) #1934
- Document elf2tag script #1916
- Add AVR32EBxx parts #1932
- Fix ATxmega fuses memory sizes #1933
- Fix avrdoper header sequence for hidusb #1937
- Fix GitHub upload artifact #1945
- PICKit5 ISP, dW, TPI, JTAG and PDI support #1935
- Ensure linuxspi part is up for 100 ms before reset #1939
- Fix missing stdlib.h include for free() #1941
- Add long options #1936
- Add docs and release badges to README #1948
- Correct PICkit5 programmer type entries #1949
- Shorten ID of ATA parts #1950
- Shorten ID of LGT parts #1951
- Suggest compatible command for SNAP/PICKit4 in PIC mode #1947
- Add AVR64DAnnS, AVR32DAnnS and AVR32SDnn #1955
- Fix variant errors introduced in recent .atdf versions #1958
- Add PICkit Basic programmer #1959
- Add --version option #1962
- Add WDT type info to avrintel.c #1963
- Remove spurious s from AVR32SDnn part id #1964
- Remove #include "usbdevs.h" from libavrdude.h #1965
* Internals:
Changes in version 8.0:
* Major changes compared to the previous version:
- Support of multi-memory .hex/.srec files and memory lists #1828
- New terminal disasm command #1842
- GUI implementation of avrdude to demonstrate libavrdude #1714
* New devices supported:
- AVR16DU14, AVR16DU20, AVR16DU28, AVR16DU32
- AVR32DU14, AVR32DU20, AVR32DU28, AVR32DU32
* New programmers supported:
- serprog
- pickit5_updi
* New serial adapters supported:
- ch342, ch344, ch347, ch9103
* Issues fixed:
- Avrintel.h missing from installation #1683
- Use of undeclared identifier 'AVRDUDE_FULL_VERSION' #1706
- Wrong message level in jtag3_prmsg() #1726
- Old avrdude_message() can go away #1719
- avr_{read,write}_mem fail to initialize progress reporting #1718
- avr*timestamp() oddities #1722
- -F option not honoured #1740
- "jtag2 is not a unique start of a programmer name" #1739
- Regression: EEPROM issue with official STK500 V1 FW #1713
- usbasp_write_byte in TPI mode not implemented #1755
- Remove calls to exit() from libavrdude library #774
- cmake enabling LINUXGPIO on ubuntu 20.04 fails #1782
- macOS github action failed. #1793
- Format mismatch warnings #1799
- 0xff optimization when reading #1732
- Add support for more AVR-DU parts #1742
- Misleading error message: cannot find programmer id #1805
- Custom programmer broken in v7.3 #1807
- ATtiny11 does not have EEPROM #1812
- AVRDUDE fails to return -1 on some write errors #1821
- Multi-memory files #1817
- Terminal erase command #1833
- Bootrow r/w does not work for -c serialupdi #1832
- Wrong error message when specifying wrong AVR-Ex part #1813
- AVR109 auto reset functionality #1697
- Unable to write LOCK bit byte to JTAG3_TPI #1858
- Unexpected auto-erase consequences #1861
- JTAGICE3 EDBG communication mode relies on hardcoded USBVID #1838
- avrdude documentation typo(s) attemps #1852
- Conflicting types for op16_is_mnemo: enum/integer #1851
- Writing BOOTROW for Curiosity Nano #1868
- Should AVRDUDE be run as root? #1860
- Auto-build avrdude.pdf from texinfo sources #1847
- Poor coverage of (concept) index in documentation #1582
- Warnings when build under NetBSD 10 and OpenBSD 7.5 #1904
- Add -e for the location of avrdude executable for test8 #1900
- Weird AVR family warning on locked AVR-Dx #1894
- How is version.texi created with autotools? #1905
* Pull requests:
- Remove 32bit MSYS2 mingw32 and clang32 build #1687
- Make avrintel.h an internal header file for libavrdude #1686
- Fix -Wcalloc-transposed-args warning #1680
- Improve autotool build #1681
- Installation of libavrdude-avrintel.h #1688
- Updated documentation about NVM models support #1689
- Abbreviate ids of modern AVR parts #1703
- Allow slash in part variant name for -p #1702
- Fix reporting of read/write times for files with holes #1700
- Change port array in PROGRAMMER to be const char * #1699
- Fix cmake build errors related to ac_cfg.h #1707
- Add benchmark option -b for test-avrdude #1709
- Replace msg_info() by msg_debug() in jtag3_prmsg()
and jtag3_prevent() #1727
- Remove unused avrdude_message() #1730
- Add lmsg_xyz() functions to start message at left margin #1728
- Document progress reporting in source code #1724
- Change type for avr_(ms|us)timestamp() to uint64_t #1729
- Use Static Libs for macOS arduino_packing build #1731
- Add arduino_packing_release github action #1690
- Fix message levels in jtag3_print_data() #1741
- Consult -F option when signature cannot be read #1745
- Check all programmer ids for exact match #1746
- Update avrintel files #1747
- Add buspirate hiz and pullups feature #1733
- Add support for libgpiod v2+ API #1725
- Remove deprecated ucr2 part #1749
- Make programmers libavrdude ready #1750, 1752, 1756 ... 1786
- Make default EEPROM readback 0xff for STK500 v1 #1753
- Silence gcc warning when printf format is "" #1754
- Remove calls to exit() from libavrdude library #1790
- Include libgpiod-dev in build.yml for Linux builds #1788
- linuxgpio: add support for libgpiod v1.4 #1792
- Use magic memory tree interface throughout #1795
- Silence MacOS compiler warning #1794
- Add macOS autotools to github action #1798
- Silence compiler warnings #1800
- Fix 7 typos in 4 files #1802
- Put static variables into context structure #1803
- Add new AVRnnDUnn parts #1804
- Differentiate cause when programmer isn't found #1806
- Prepare for next urboot version #1808
- Rename AVRDUDE symbol names ending in _t #1809
- Warn when programmer failes to define prog_modes #1810
- Add serprog programmer #1801
- Remove EEPROM from ATtiny11 avrdude.conf entry #1814
- Guard serial_number access in usbhid_open() to avoid segfault #1815
- Allow selection of program modes for developer options #1816
- Return -1 on write error #1822
- Extend elf format for bootrow #1820
- Update AUTHORS list #1819
- Downgrade out-of-range file input errors on -F #1818
- Multi-memory file handling #1828
- Add developer options -p*/vcr to explore SW compatibility #1830
- Improve chip erase emulation for dryboot/dryrun #1836
- Use page erase for UPDI programming #1837
- Add fuses, calibration, sernum and tempsense memories #1829
- Fix bootrow access for -c serialupdi #1835
- Improve signature check for UPDI parts #1840
- Improve error handling for avrdude without libserialport #1843
- Provide terminal disasm command #1842
- Improve auto-reset handling and -x/-E parsing #1844
- Remove obsolete SVN $Id$ tags from source files #1850
- Update look and feel #1849
- Update documentation for -E and -x #1853
- Add more WCH USB to serial chips #1855
- cmake: LIB_NCURSES also accept pdcurses #1856
- Fix byte writes to TPI lockbits for jpag3.c #1859
- Refine auto-erase strategy #1862
- Provide -P usb:vid:pid for USB hid i/f and allow
long -P usb:serno for usblib and hidapi #186
- Initialise dryrun flash with realistic random code #1873
- Writing BOOTROW for Curiosity Nano #1870
- Refine programmer/part/memory compatibility modelling #1869
- Provide dev option -c \*/u that shows udev rules #1867
- Provide current avrdude.pdf documentation in repo root #1865
- doc: Stop building and installing .ps and .dvi #1857
- Improve autotools build (part 2/n) #1695
- Use correct file locations in the documentation #1637
- Deprecate obsolete features and options #1875
- Add more hard-coded usbvid/pid to udev rules #1876
- Fixes for jtag3 programmers and prep for jtagmkII #1877
- SWIG Python wrapper for libavrdude #1714
- PICkit 5 support #1863
- Make usbproduct available to programmers #1880
- Silently skip erasing read-only parts of a memory #1883
- Fix ATmega1284/P readsize #1886
- Fix addresses for jtag3_pdi boot and apptable #1887
- Adapt documentation to new Look and Feel #1892
- Adapt tools/test-avrdude script for versatile CI use #1891
- Reformat sources #1893
- Add to parts, programmers and index in avrdude.pdf #1895 #1902
- Fix deprecated types in libavrdude.i #1896
- Update build.yml to re-enable Windows on ARM64 MSVC build #1901
- Add -e exe option to test8 #1903
- Refrain from polling memories other than flash/eeprom #1897
- Remove known limitations comment from serprog.c #1906
- Improve messaging around locked UPDI parts #1907
- Improve Documentation #1908
- Silence compiler warnings #1909
- Parport build test #1874
- CI: test running the built avrdude executable #1888
- Add checks for zombie sourcecode problems #1910
- Iron out some problems in jtagmkII #1911
* Internals:
- Created a context structure pointed to by cx, which harbours global
and static variables
- Made programmers libavrdude ready: remove exit() calls and moved
static variables into local struct pdata
Changes in version 7.3:
* Major changes compared to the previous version:
- Connect target via -P serialadapter[:sn] and -P usb:vid:pid[:sn] #1498
- Add io and sram memory info in lieu of incomplete data memory
- New test-avrdude script in tools #1645
- Update SerialUPDI protocol #1627
- Terminal
+ Command regfile #1580
+ Command factory reset #1642
* New devices supported:
- AVR16EB14, AVR16EB20, AVR16EB28, AVR16EB32
- AVR64DU28, AVR64DU32
* New programmers supported:
- ft2232h_jtag, ft232h_jtag
- dryboot
* Issues fixed:
- Provide sib memory for AVR8X parts #1479
- HAS_VTARG_READ not utilized in source code #1469
- -c stk500 only works with stk500v2 firmware #1467
- Read silicon revision from modern AVRs #1472
- Dryrun doesn't overlap XMEGA flash memories #1485
- 7e94ed4442b breaks flashing GT2560 boards #1503
- Cross-platform support for 1200bps touch #1500
- Read ATmega324PB and ATmega328PB serial number #1509
- EEPROM file generates error with 7.2 #1508
- PGM LED not activated for flash or eeprom write #1514
- Adding the Avrdude build version to avrdude.conf #1475
- Harmonise WIN32 and POSIX serial comms timeout #1249
- Old avrdude.conf can result in a segmentation fault #1544
- Support AVR EB series #1546
- Programmer in .avrduderc not recognised #1551
- JTAG signature write ineffective #1527
- Control forced loading of ~/.avrduderc #1548
- Warn if avrdude and avrdude.conf versions don't match #1562
- Terminal part command could need an update #1558
- Proposal: Add memory sram #1559
- jtagmkI.c/jtagmkII.c rely on OCDEN being hfuse bit 7 #1537
- Certain terminal commands may be confusing #1570
- Upload port required for -cdryrun on MacOS #1578
- Make programmer -c name checking more forgiving #1591
- Query a programmer's current clock speed #1329
- Differentiate USB programmers with the same VID/PID #973
- Add AVR-DU series latest information #1595
- Provide simple way to factory reset a chip #1619
- Incorrect SerialUPDI communication for NVM V3, V4 and V5 #1621
- SerialUPDI programmer can fail when erasing EEPROM #1622
- SerialUPDI - NVMProg key not being accepted immediately
after NVM V3+ chip completes boot #1623
- USE_STATIC_LIBS builds fail to detect libreadline.so #1624
- Writing one-byte files to flash fails #1633
- Integrate test-avrdude github action using dryrun #1643
- Test script issues #1649
- SerialUPDI unable to write USERROW memory on AVR64DU32 #1655
- The last write/erase can fail with -c jtag2updi #1661
- Improve programmer documentation in avrdude.conf #1437
* Pull requests:
- Add JTAG support to avrftdi #1324
- Fix probing of the generic -c stk500 programmer #1468
- Utilize HAS_VTARG_READ defined in avrdude.conf #1470
- Provide sib memory for AVR8X parts #1480
- Read chip revision and add IO memory for PDI/UPDI parts #1474
- Replace string comparison functions #1482
- Fix overlapping XMEGA flash memories for dryrun #1486
- Exit if part and programmer are incompatible #1487
- Add io memory for classic parts #1488
- Add AVR-EB parts #1491
- Review calibration read command in avrdude.conf #1495
- Provide serialadapter entity in avrdude.conf #1497
- Add -P serialadapter[:sn] and -P usb:vid:pid[:sn] #1498
- Add -xdelay=n to wiring and improve reset timing #1505
- Reduce stk500v2_getsync() timeout #1506
- libserialport github action #1512
- Support serial port "touch" using libserialport #1507
- Read prodsig of classic parts #1510 #1520-21 #1524-26
- Adapt stk500 readback values for usbtiny.c #1511
- Add LED support for ScratchMonkey programmer #1517
- Review and update prodsig memories for U/PDI parts #1518
- Add id as comment to avrdude.conf definitions #1519
- Model prodsig for -c dryrun #1522
- Fix tempsense size, AVR-EB memory offsets and avrdude.conf
memory order #1523
- Review and update LED support #1528
- Fix SerialUPDI with NVM v3 controller #1531
- Add bootloader hashes from the Sanguino Arduino repo #1533
- Support MinGW cross compiler #1539
- Add avrdude_conf_version to grammar #1542 #1547
- Change execution order in silicon revision check #1543
- Add Arduino avrdude_packing github action for git man #1540
- Introduce memory types in lieu of memory name comparisons #1538
- Allow UPDI_SIB of AVR_EB in serialupdi #1549
- Harmonise WIN32 and POSIX serial comms timeout #1550
- Test programmers for prog_modes and type #1557
- Remove paged eeprom property from ATtiny43U #1556
- Review write_byte() functions #1554
- Provide option -N for do not load personal config file #1555
- Print warning when avrdude and avrdude.conf versions doesn't match #1564
- Always warn if part and programmer are incompatible #1563
- Provide -x xtal=... option for STK500 v1 and v2 #1566
- Update part cmd #1568
- Update src/CMakeLists.txt #1569
- Add memory sram and remove memory data #1571
- Add GNU readline to mingw github action #1576
- Provide libavrude functions to access part config values #1577
- Add get_vtarget/varef/fosc/sck_period for programmers #1574
- Provide terminal regfile command #1580
- Ignore port settings when using -c dryrun #1581
- Add more PL2303 compatible USB PIDs #1583
- Faster build.sh script with option -j #1586
- Terminal sck command improvements #1587
- Differentiate USB programmers with the same VID/PID #1588
- Provide configuration variable default_baudrate #1590
- Increase index entries in avrdude.texi #1592
- Suggest programmers using weighted Damerau-Levenshtein #1593
- Switch PICkit4 and SNAP avr/pic modes using -xmode #1596
- Support AVR64DU28 and AVR64DU32 #1601
- Force STK500 EEPROM paged r/w for bootloaders #1602
- Provide terminal keep alive code for jtagmkII_updi #1603
- Fix Arduino Nano Every EEPROM writing for UPDI parts #1604
- Provide and use locate_part_by_signature_pm() #1605
- Harden AVRDUDE against pre-C99 libraries #1608
- Add MSYS2 ucrt64, clang32 and clang64 to build.yml #1612
- Updates to SerialUPDI protocol #1627
- Fix upload of one-byte files to flash #1634
- Add CH343 USB to serial adapter #1640
- Add dryboot programmer #1641
- Provide terminal command factory reset #1642
- Add tools/test-avrdude #1645
- Add test-avrdude using dryrun to github action #1646
- Add delay for AVR Dragon and Arduino Nano Every #1647
- Make test-avrdude script resilient to old bash #1650
- Create test-avrdude temporary files in the script itself #1651
- Enable writing of 512-byte page for USERROW #1659
- Read signature on -c jtag2updi exit if last op was write #1662
- Determine Autoconf package version from cmake's #1663
- Add more programmer descriptions #1667
- test(1) string comparison uses =, not == #1668
* Internals:
- Introduce memory types in lieu of memory name comparisons #1538
This will enable to decouple memory names from function
- Added a knowledgebase on register files of parts
Changes in version 7.2:
* Major changes compared to the previous version:
- libgpiod support for linuxgpio #1299
- Support jtag2updi -U UPDI EEPROM write #1318
- avrdude.conf reconciled with ATDFs #1343
- avrdude -p part/s now also shows part variants #1343
- New programmer dryrun for testing #1347
- New -T cmd to mix terminal with -U commands #1373
- Run -t interactive terminals in CLI option order #1402
- Terminal
+ Command config (mnemonic fuse setting) #1365
+ Write to memory from files #1358
+ Command save memory to file #1396
+ Subshell command ! #1397
+ Command include file #1429
* New devices supported:
- AT89S51, AT89S52
- AT90S2323, ATtiny22
- ATmega16M1, ATmega32C1, ATmega64C1
- ATA5505
- ATA6612C, ATA6613C
- ATA6614Q
- ATA6616C, ATA6617C
- ATA664251
- ATmega16HVA, ATmega8HVA
- ATmega16HVB, ATmega16HVBrevB, ATmega32HVB, ATmega32HVBrevB
- ATmega64HVE2, ATmega32HVE2
- AT90PWM1
- AT90PWM161, AT90PWM81
- ATxmega32C3
- ATxmega32D3
- ATtiny416auto
- Variants of known devices now accepted:
AT32UC3A0512AU AT90PWM81EP AT90S1200A ATmega103L
ATmega1280V ATmega1281V ATmega128L ATmega161L
ATmega162L ATmega162V ATmega163L ATmega164PV
ATmega165PV ATmega165V ATmega168PV ATmega168V
ATmega169L ATmega169PV ATmega169V ATmega16L
ATmega16U4RC ATmega2560V ATmega2561V ATmega324PV
ATmega3250PV ATmega3250V ATmega325PV ATmega325V
ATmega3290PV ATmega3290V ATmega329PV ATmega329V
ATmega32L ATmega32U4RC ATmega48PV ATmega48V
ATmega640V ATmega644PV ATmega644V ATmega6450V
ATmega645V ATmega6490V ATmega649V ATmega64L
ATmega8515L ATmega8535L ATmega88PV ATmega88V
ATmega8L ATtiny102F ATtiny104F ATtiny11L
ATtiny12L ATtiny12V ATtiny13V ATtiny15L
ATtiny22L ATtiny2313V ATtiny24V ATtiny25V
ATtiny261V ATtiny26L ATtiny28L ATtiny28V
ATtiny44V ATtiny45V ATtiny461V ATtiny84V
ATtiny85V ATtiny861V AVR128DA28T AVR128DA32T
AVR128DA48T AVR128DA64T AVR128DB28T AVR128DB32T
AVR128DB48T AVR128DB64T AVR32DA28T AVR32DA32T
AVR32DA48T AVR32DB28T AVR32DB32T AVR32DB48T
AVR64DA28T AVR64DA32T AVR64DA48T AVR64DA64T
AVR64DB28T AVR64DB32T AVR64DB48T AVR64DB64T
* New programmers supported:
- dryrun
- raspberry_pi_gpio
- Flyswatter2
- CH341A
- Kanda AVRISP-U
- arduino_as_isp
- scratchmonkey, scratchmonkey_pp, scratchmonkey_hvsp
* Issues fixed:
- STK500V2 ISP problem with ATmega8/8515/8535, ATmega16 and
ATmega32 #425
- CMAKE issue: parport, linuxspi and linuxgpio not available
when compiled #1107
- MSYS2: Linker error when readline is present. #1293
- CMake Warning for MSVC build about CMAKE_BUILD_TYPE #1290
- PICKit 2: MSVC build of avrdude Windows binary does not work
#1006
- CMake version not checked properly in Ubuntu 18.04 #1300
- Pin limit too low for LePotato RPi clone #1307
- Port Linux sysfs GPIO feature to libgpiod #831
- Allow direct reset connection #1262
- AT89S51 and AT89S52 support for avrdude #1304
- Using serialupdi gives mismached help message #1311
- jtag2updi -U EEPROM write fails for AVR Dx parts #1128
- Usbtiny initialization never resets the part #1321
- Parts with *L, *PV and *V suffixes + others are missing in
avrdude.conf #1092
- -c urclock should progressively shrink metadata #1352
- Write errors in fuses/lock bits with unused bits #1371
- Some SPI read/write commands incompatible with .ATDF #1370
- Avrdude can segfault writing ihex or srec files #1390
- Avrdude srec format too lax when writing #1391
- Avrdude fails with AT90S8515 #433
- AT90S8515 STK500v2: only odd bytes are programmed #500
- STK500v2 ATtiny15 problem #509
- Downgrade missing USB device warning #1398
- Avrdude can not write usersig in terminal mode #1361
- avr109 atmega2564rfr2 erase timeout too short #336
- Add ScratchMonkey #989
- Warnings for MSVC build #1452, #1460
- [Regression] -F flag not correctly honored #1462
- Missing access to user signature rows in ATmega256RFR2 et al. #379
* Pull requests:
- Correct memory mode, delay and readback (classic parts) #1272
- Only send write flash cmd to STK500v2 ISP programmers if page
is not empty #1273
- Fix docu that avrftdi bit numbers start with 0 #1276
- Silence gcc compiler warnings #1277
- Reduce complexity of grammar #1282
- CMake: Convert verbal switches into boolean expressions #1285
- Add extra_features to identify a programmer's abilities #1286
- CMake: Remove LIB_LIBHID from configuration in favour of
hard-coding #1294
- build.sh: For compatibility with old CMake versions, use old
syntax to generate build system #1301
- Extend max pin number to 1000 #1308
- Add optional libgpiod support to linuxgpio #1299
- Auto-reset via RTS for direct RTS-reset connection #1309
- Support AT89S51, AT89S52, AT90S2323 and ATtiny22 #1310
- Remove PM_PDI flag for avrispv2 programmer #1314
- Make terminal write address optional for 1-byte memories #1315
- Print meaningful error message when using the serialupdi and
bitbanged UART ISP programmers #1317
- Support jtag2updi -U EEPROM write #1318
- Fix return value in usbtiny_cmd() and wrong error msg #1323
- Add CH341A programmer #1215
- Terminal read, write and erase with address intervals #1320
- Add Flyswatter2 programmer #1332
- Update avrintel.[ch] #1333
- Improve bitclock, sck and terminal documentation #1331
- Add -xhelp to programmers #1338
- Move avrintel[.ch] into libavrdude #1341
- Review avrdude.conf, add variants, reconcile with ATDFs #1343
- Add -xvtarg, -xvaref and -xfosc extended parameters #1345
- Add case-agnostic string comparisons to strutil.c #1346
- Provide a programmer dryrun that emulates programming #1347
- Add variants of obsolete parts to avrdude.conf #1348
- Add option -f to build.sh #1342
- Document -n behaviour wrt -U and terminal #1351
- Progressively shrink metadata for -c urclock #1357
- Extend <data> notion to files in terminal write #1358
- Add fuse0 to ATxmega128A4U/64A4U/32A4U/16A4U #1360
- Add configuration for Kanda's AVRISP-U programmer #1363
- Add more Avrdude CLI usage examples #1364
- Provide terminal config command for fuses and lock bits #1365
- Initialise unused bits of classic/XMEGA- part fuses/lock bits
with factory defaults #1372
- Implement -T cmd to mix terminal with -U commands #1373
- Prevent terminal write error for unchanged r/o region #1375
- Remove pgm->page_erase() function when unable to do so #1376
- Write fuse/lock only when terminal config changes them #1378
- Provide programmer arduino_as_isp #1383
- Provide debug messages for the dryrun programmer #1385
- Rewrite fileio functions to cater for memory segments #1392
- Add more documentation for programmers #1393, #1394, #1395
- Provide terminal save command #1396
- Provide terminal subshell command ! #1397
- Fix stk500v2.c's write_byte() for old parts #1386
- Document terminal comments #1399
- Expand authorship of documentation #1400
- Fix memory leak in avrcache.c #1401
- Run -t interactive terminals when it is their turn with
respect to -t/-T/-U command line option order #1402
- Mute missing USB device warning for lower verbosity #1403
- Implement bytewise cache for usersig #1404
- Relax checks before executing the -T/-U operations #1405
- Define usersig memory for ATmega*RF[AR]* parts #1406
- Increase timeout for emulated butterfly chip erase #1411
- Update reference to AT90S4433 datasheet #1415
- Update alf programmer info and URL #1416
- Update URLs for 89isp programmer #1417
- Update ft2232h programmer info and URLs #1418
- Update butterfly_mk info #1419
- Remove outdated web URLs for O-Link #1420
- Update URLs for the ttl232r programmer #1421
- Update usbasp programmer info #1422
- Remove comment and URL for arduino-ft232r programmer #1423
- Enable -c programmers to access -c string #1424
- Add scratchmonkey programmers #1429
- Use pgm->id list for alias names of a programmer #1430
- Fix writing of empty flash memory #1438
- Provide terminal include command #1439
- Add jtag2updi -xrtsdtr extended parameter #1425
- Update info on bsd programmer #1450
- Suppress overzealous compiler warnings #1454, #1461
- Bail out on failed initialisation unless -F was given #1463
- Fix -n warning for first interactive terminal #1465
- Fix classic-part usersig memory for jtag #1466
* Internals:
Changes in version 7.1:
* Major changes compared to the previous version:
- Provide a new programmer -c urclock for bootloader urprotocol
+ Urclock fully supports vector bootloaders at no extra code size
+ Uprotocol
https://github.com/stefanrueger/urboot/blob/main/urprotocol.md
allows programming much shorter bootloaders with more features:
* Exports a pgm_write_page(sram, progmem) function that the
application can call at FLASHEND-4+1 to use flash as storage
* Supports EEPROM reads/writes
* Protects itself from overwriting
* Vector bootloaders: can protect the reset vector
* Offers Chip Erase function (quicker than uploading 0xff's)
+ Urclock when compiled with libreadline supports bootloaders in
terminal mode (preventing them from WDT timeout)
+ The -c urclock programmer provides a metadata interface that
allows unused flash to be used as storage
+ avrdude -c urclock is backward compatible with avrdude -c arduino
- Add TPI support for Microchip tools #1205
- Add C-strings, C characters and double to terminal write
- Provide write flash in the terminal (using a cache)
- Provide page erase in the terminal as pgerase
- Add support for NetBSD and OpenBSD to build.sh
* New devices supported: none
* New programmers supported:
- urclock = Urclock programmer for bootloaders using urprotocol
- xplainedmini_tpi = Atmel AVR XplainedMini in TPI mode
- xplainedpro_pdi = Atmel AVR XplainedPro in PDI mode
- atmelice_tpi = Atmel-ICE (ARM/AVR) in TPI mode
- powerdebugger_tpi = Atmel PowerDebugger (ARM/AVR) in TPI mode
- pickit4 = MPLAB(R) PICkit 4 in JTAG mode
- pickit4_tpi = MPLAB(R) PICkit 4 in TPI mode
- snap = MPLAB(R) SNAP in JTAG mode
- snap_tpi = MPLAB(R) SNAP in TPI mode
- arduino_gemma = Arduino Gemma bootloader disguised as USBtiny
- adafruit_gemma = Adafruit Trinket Gemma bootloader disguised as USBtiny
- digilent-hs2 = Digilient JTAG HS2 (MPSSE)
- tigard = Tigard interface board
* Issues fixed:
- Fix micronucleus bootloader to check for unresponsive USB
@ -58,6 +688,34 @@ Changes since version 7.0:
- Make UPDI programmers less verbose during initialization
#1084
- Quell mode isn't handled systematically #1114
- Mixing the progress bar with warning messages #1136
- Inconsistent terminal output re stdout and stderr #1130
- Supress the warning for Microchip SNAP #1135
- ATtiny85 communication problem with default bitclock #1133
- [Regression] Optiboot for "modern AVRs" no longer works #1120
- Cannot access EEPROM on some bootloader/part combos #970
- -U writes sometimes more bytes to flash/memory than input
file has #1050
- debugWire using dragon_dw and jtag2dw not working #1168
- && echo OK does not work after -c urclock #1192
- Serial drain timeout needs calibrating for -c urclock #1193
- avrdude -U file.elf misses second and following suitable
sections in elf segements #1204
- Avrdude on macOS has problems with libedit #1173
- urclock support for optiboot_x and optiboot_dx #1200
- Terminal does not continue read/dump correctly #1201
- JTAG3 programmer info not available in ISP mode #1212
- Extra avrdude> prompt with -qqt in terminal mode #1214
- PICkit4 and SNAP serial numbers not read by Avrdude #1038
- Optiboot EEPROM support cannot be detected by avrdude #1224
- megaAVR JTAG programming doesn't work for SNAP and PICkit4
#1052
- urclock/FTDI communication issues #1245
- stk500v2.c dumps core on open #1254
- linuxgpio cannot use pin 0 #1228
- Remove non-working butterfly page erase function
- linuxgpio and linuxspi: input files with unset bytes don't program
correctly #1263 #455
* Pull requests:
@ -153,14 +811,81 @@ Changes since version 7.0:
- Suppress Teensy USB communication error message on reboot #1122
- Fix UPDI erase when target is locked #1125
- Review and overhaul AVRDUDE's messaging system #1126
- Look for ~/.config/avrdude/avrdude.rc then ~/.avrduderc #1131
- Revamp terminal output (progress bar, callback and
stdout/stderr) #1132
- Detect PICkit4 and SNAP in PIC mode #1138
- Mention -B in the error message #1139
- Support optiboot, optiboot_dx and optiboot_x bootloaders for
-c arduino #1140
- Always use paged access for programmers that serve
bootloaders #1141
- Add libreadline-dev for Linux github action build #1146
- Implementation of SerialUPDI page erase operation #1151
- Fix Type 2 HV UPDI #1164
- Rewrite authors/copyrights #1182
- Add fallback for EM_AVR #1181
- Add a workaround for issue 1173 #1185
- Add xplainedpro_pdi programmer #1147
- Provide Urclock programmer #1171
- Fix JTAGICE mkII (not initializing after chip erase) #1172
- Ensure default_programmer from config files is used #1174
- Make terminal write's automatic number width less surprising
#1175
- Print HAVE_LIBREADLINE status when making the project #1184
- Pad pages with input file contents before avr_write() #1188
- Deprecate mosi/miso in favour of sdo/sdi #1189
- Provide bootloader-hash tool #1190
- Fix JTAGICE mkII parameters for parts with bootloaders #1191
- Fix shell exit value when chip erase is delayed #1194
- Support autobaud for urclock programmer #1198
- Fix userrow size and page_size for ATtiny3216/7 #1199
- Added TPI support for Microchip tools #1205
- Fix reading of .elf files #1206
- Use libedit only in interactive mode #1207
- Add urclock support for bootloaders in low flash #1208
- Terminal read improvements #1209
- Print meaningful error when a too slow ISP clock is detected #1216
- Check alternative USB PID for PICkit4/SNAP in PIC mode #1219
- Remove extraneous avrdude> prompt at end of terminal session #1220
- Read programmer serial number from libusb or hidusb #1223
- Hint at -xeepromrw option in EEPROM error messages #1226
- Add JTAG support for PICkit4 and Snap. #1233
- Mention developer options in documentation and Usage() #1234
- Print expected signature on signature mismatch #1237
- To work around Issue #1107 #1240
- Update build.sh for NetBSD #1241
- Add FT2232H support for Windows, Tigard programmer #1242
- Modify recv timeouts to accommodate urclock sync with ftdi
#1246
- CMake updates #1243
- Silence conf path detection debug output #1247
- Make WIN32 ser_recv() fail on time-out #1248
- Guard urclock_getsync() against initial spurious input #1251
- Change definition of NO_PIN to 1+PIN_MAX #1231
- Fix partial matches for locate_mem() and do_cmd() #1256
- Add abbreviated q command in terminal
- Move static usbsn into serdev struct and remove serno #1258
- Clean up avrdude.conf.in fixing a couple of bugs #1260
- Add readline library replacement for MSVC #1264
- Ensure full words are loaded for ISP programming #1265
- Silence page erase in cache code #1266
- Update to latest MSVC fork of hidapi to include bug fixes
#1269
* Internals:
- Implement -c <wildcard>/dev_opts and -p <wildcard>/dev_opts
for printing avrdude.conf programmer and part entries
- Added shorter alternative ISP commands for avrdude.conf
- Reformatted avrdude.conf to canonical form
- Reviewed API for prgrammer functions: use const for
programmer functions where useful; add second argument for
void (*enable)(PROGRAMMER *pgm, const AVRPART *p) #1078
- Reviewed messaging system making warnings and errors explicit
and treat them systematically
@ -874,11 +1599,11 @@ Version 5.7:
- ATXMEGA64A1
- ATXMEGA192A1
- ATXMEGA256A1
- ATXMEGA256A1
- ATXMEGA64A3
- ATXMEGA128A3
- ATXMEGA192A3
- ATXMEGA256A3
- ATXMEGA256A3
- ATXMEGA256A3B
- ATXMEGA16A4
- ATXMEGA32A4
@ -1148,7 +1873,7 @@ Version 4.1.0
* Add support for avr910 type programmers (mcu00100, pavr avr910, etc).
* Support new devices: ATmega8535, ATtiny26
Version 4.0.0

View file

@ -1,6 +1,8 @@
# AVRDUDE
[![Build Status](https://github.com/avrdudes/avrdude/actions/workflows/build.yml/badge.svg)](https://github.com/avrdudes/avrdude/actions/workflows/build.yml)
[![Gh-pages docs](https://img.shields.io/badge/Docs-online-blue)](https://avrdudes.github.io/avrdude/)
[![GitHub Release](https://img.shields.io/github/v/release/avrdudes/avrdude?color=yellow)](https://github.com/avrdudes/avrdude/releases)
AVRDUDE - AVR Downloader Uploader - is a program for downloading and uploading
the on-chip memories of Microchips [AVR microcontrollers](https://en.wikipedia.org/wiki/AVR_microcontrollers).
@ -18,17 +20,17 @@ The latest version of AVRDUDE is always available here:\
## Documentation
Documentation for current and previous releases is [on Github Pages](https://avrdudes.github.io/avrdude/).
Documentation for current and previous releases is [on Github Pages](https://avrdudes.github.io/avrdude/). Git main is documented only with the most recent [avrdude.pdf](https://github.com/avrdudes/avrdude/blob/main/avrdude.pdf).
## Getting AVRDUDE for Windows
To get AVRDUDE for Windows, install the latest version from the [Releases](http://download.savannah.gnu.org/releases/avrdude/) page.
To get AVRDUDE for Windows, install the latest version from the [Releases](https://github.com/avrdudes/avrdude/releases) page.
Alternatively, you may [build AVRDUDE](https://github.com/avrdudes/avrdude/wiki) yourself from source.
## Getting AVRDUDE for Linux
To install AVRDUDE for Linux, install the package `avrdude` by running the following commands:
To install AVRDUDE for Linux, install the package `avrdude` using the software package manager. For example, under Debian/Ubuntu, you can use the following commands:
```console
sudo apt-get install avrdude
@ -36,9 +38,9 @@ sudo apt-get install avrdude
Alternatively, you may [build AVRDUDE](https://github.com/avrdudes/avrdude/wiki) yourself from source.
## Getting AVRDUDE for MacOS
## Getting AVRDUDE for macOS
On MacOS, AVRDUDE can be installed through Mac Ports.
On macOS, AVRDUDE can be installed through MacPorts or Homebrew.
Alternatively, you may [build AVRDUDE](https://github.com/avrdudes/avrdude/wiki) yourself from source.
@ -62,3 +64,12 @@ avrdude -c arduino -P COM1 -b 115200 -p atmega328p -D -U flash:w:objs/blink.hex:
There are many different programmers and options that may be required for the programming to succeed.
For more information, refer to the [AVRDUDE documentation](https://avrdudes.github.io/avrdude/).
## Using the AVRDUDE GUI demonstrator
Starting with version 8, a GUI implementation has been added, to demonstrate the functionality of `libavrdude` is suitable to implement a native GUI (as opposed to CLI wrapper).
The GUI is based on the Qt toolkit and its Python bindings, called _PySide_.
Either Qt5 with PySide2, or Qt6 with PySide6 are supported.
A script named `avrdude-gui` is installed into the same location as the AVRDUDE CLI program. It can be used to start the GUI. There is a builtin help describing the usage.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,116 +0,0 @@
var BrowserDetect = {
init: function () {
this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
this.version = this.searchVersion(navigator.userAgent)
|| this.searchVersion(navigator.appVersion)
|| "an unknown version";
this.OS = this.searchString(this.dataOS) || "an unknown OS";
},
searchString: function (data) {
for (var i=0;i<data.length;i++) {
var dataString = data[i].string;
var dataProp = data[i].prop;
this.versionSearchString = data[i].versionSearch || data[i].identity;
if (dataString) {
if (dataString.indexOf(data[i].subString) != -1)
return data[i].identity;
}
else if (dataProp)
return data[i].identity;
}
},
searchVersion: function (dataString) {
var index = dataString.indexOf(this.versionSearchString);
if (index == -1) return;
return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
},
dataBrowser: [
{
string: navigator.userAgent,
subString: "Chrome",
identity: "Chrome"
},
{ string: navigator.userAgent,
subString: "OmniWeb",
versionSearch: "OmniWeb/",
identity: "OmniWeb"
},
{
string: navigator.vendor,
subString: "Apple",
identity: "Safari",
versionSearch: "Version"
},
{
prop: window.opera,
identity: "Opera"
},
{
string: navigator.vendor,
subString: "iCab",
identity: "iCab"
},
{
string: navigator.vendor,
subString: "KDE",
identity: "Konqueror"
},
{
string: navigator.userAgent,
subString: "Firefox",
identity: "Firefox"
},
{
string: navigator.vendor,
subString: "Camino",
identity: "Camino"
},
{ // for newer Netscapes (6+)
string: navigator.userAgent,
subString: "Netscape",
identity: "Netscape"
},
{
string: navigator.userAgent,
subString: "MSIE",
identity: "Explorer",
versionSearch: "MSIE"
},
{
string: navigator.userAgent,
subString: "Gecko",
identity: "Mozilla",
versionSearch: "rv"
},
{ // for older Netscapes (4-)
string: navigator.userAgent,
subString: "Mozilla",
identity: "Netscape",
versionSearch: "Mozilla"
}
],
dataOS : [
{
string: navigator.platform,
subString: "Win",
identity: "Windows"
},
{
string: navigator.platform,
subString: "Mac",
identity: "Mac"
},
{
string: navigator.userAgent,
subString: "iPhone",
identity: "iPhone/iPod"
},
{
string: navigator.platform,
subString: "Linux",
identity: "Linux"
}
]
};
BrowserDetect.init();

File diff suppressed because one or more lines are too long

View file

@ -1,227 +0,0 @@
/* RESETS */
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, tt, var,b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td { /* */
margin: 0;
padding: 0;
border: 0;
outline: 0;
font-size: 100%;
vertical-align: baseline;
background: transparent;
}
body { font: 12px Verdana, Geneva, sans-serif; }
@font-face {
font-family: DroidSansMono;
src: url("../fonts/DroidSansMono.eot") /* EOT file for IE */
}
@font-face {
font-family: DroidSansMono;
src: url("../fonts/DroidSansMono.ttf") /* TTF file for CSS3 browsers */
}
p, ul, ol, li { font: 10pt Verdana, Geneva, sans-serif; }
h1 { font: bold 15pt IntervalLight, sans-serif; }
h2 { font: bold 14pt IntervalLight, sans-serif; }
h1, h2, h3 { color: #444;}
h4, h5, h6 { color: #444;}
h3, h4, h5, h6 {padding:10px 0px 2px 4px;}
.book h1, .chapter h2, .section h2 {
padding-top: 3px;
padding-bottom: 18px;
margin-bottom: 6px;
border-bottom: 1px #CCC solid;
}
p {
font-size: 11px;
line-height: 15px;
color: #444;
/*width: 100%; Removing width so it's not fixed or floated */
padding: 0px 10px 10px 5px; /* changed padding-right from 5 to 10 and padding-left from 10px to 5px */
*padding: 5px 5px 10px 0px; /* IE7 hack */
}
/* Page layout */
div#content
{
padding: 1em 2em 1em 2em;
}
.navfooter
{
margin-top: 2em;
}
.navfooter table td
{
background-color: white;
}
.mediaobject img
{
margin: 0.5em 0.5em 0.5em 0.5em;
vertical-align: middle;
max-width: 100%;
}
.mediaobject img[align="left"]
{
margin-right: 2em;
}
.informalfigure { margin: 6px; }
/* "Layout" tables should not have borders */
#content table, #content table td { border: none; }
/* Generic tables */
#content .table table th, #content .informaltable table th { background-color: #585858 }
#content .table table, #content .informaltable table
{
border-collapse:collapse;
border: none;
}
#content .table tr:nth-child(odd), #content .informaltable tr:nth-child(odd)
{
background-color: #f2f2f2;
}
#content .table tr:nth-child(even), #content .informaltable tr:nth-child(even)
{
background-color: #d9d9d9;
}
#content .table table td, #content .informaltable table td,
#content .table table th, #content .informaltable table th
{
border: 1px solid #A7A9AB;
}
#content .footnotes tr td
{
background-color:white;
border: none;
}
/* Admonitions */
div.note, div.caution, div.important, div.tip, div.warning
{
border: solid 1px #AAA;
background: #ededed;
padding: 0.5em 1em 0.5em 1em;
margin: 1em 0em 1em 0em;
}
div.note *, div.caution *, div.important *, div.tip *, div.warning * {
background: inherit !important;
color: inherit !important;
border: none;
}
/* Program listing */
.programlisting
{
/*width: auto;*/
border: solid 1px #AAA;
background: #ededed;
padding: 1em;
margin-top: 1em;
margin-bottom: 1em;
overflow:hidden;
font-family: DroidSansMono, Consolas
}
/* Lists */
ul
{
list-style: square outside;
margin: 0 0 0 1em;
padding: 0 0 0 0;
}
ul.square
{
list-style: square outside;
margin: 0 0 0 1em;
padding: 0 0 0 0;
}
ul.circle, ul[type=disk]
{
list-style: disc outside;
margin: 0 0 0 1em;
padding: 0 0 0 0;
}
ol
{
list-style-type: decimal;
list-style: decimal;
margin: 0 0 0 2.8em;
padding: 0 0 1em 0;
}
li
{
padding-bottom: .3em;
/*list-style: square;*/
}
li p
{
margin: 0 0 .25em 0;
padding: 0 0 0 0;
}
ul ul.circle
{
margin-top: .3em;
}
ul ul.square
{
margin-top: .3em;
}
ul, ol { margin-left: 3em; }
/*
dl dt { padding: 0px 10px 0px 5px;}
*/
div.orderedlist-collapsed
{
margin: 1em 0 0 1em;
padding: 0 0 1em 0;
font-size:smaller;
}
div.orderedlist-collapsed span.listitem
{
margin-right: 1em;
}
.variablelist dt
{
font-weight: bold;
color: black;
}
dl.toc
{
margin-left: 2em;
margin-bottom: 2em;
}
.guibutton, .guimenu, .guimenuitem, .guisubmenu
{
font-family: Arial, Verdana, Geneva, sans-serif;
color: black;
font-weight: bold;
}
.disclaimer
{
font-size: 6pt;
}

View file

@ -1,154 +0,0 @@
/*
Variable Grid System (Fluid Version).
Learn more ~ http://www.spry-soft.com/grids/
Based on 960 Grid System - http://960.gs/ & 960 Fluid - http://www.designinfluences.com/
Licensed under GPL and MIT.
*/
/* Containers
----------------------------------------------------------------------------------------------------*/
.container_3 {
width: 92%;
margin-left: 4%;
margin-right: 4%;
}
/* Grid >> Global
----------------------------------------------------------------------------------------------------*/
.grid_1,
.grid_2,
.grid_3 {
display:inline;
float: left;
position: relative;
margin-left: 1%;
margin-right: 1%;
}
/* Grid >> Children (Alpha ~ First, Omega ~ Last)
----------------------------------------------------------------------------------------------------*/
.alpha {
margin-left: 0;
}
.omega {
margin-right: 0;
}
/* Grid >> 3 Columns
----------------------------------------------------------------------------------------------------*/
.container_3 .grid_1 {
width:31.333%;
}
.container_3 .grid_2 {
width:64.667%;
}
.container_3 .grid_3 {
width:98.0%;
}
/* Prefix Extra Space >> 3 Columns
----------------------------------------------------------------------------------------------------*/
.container_3 .prefix_1 {
padding-left:33.333%;
}
.container_3 .prefix_2 {
padding-left:66.667%;
}
/* Suffix Extra Space >> 3 Columns
----------------------------------------------------------------------------------------------------*/
.container_3 .suffix_1 {
padding-right:33.333%;
}
.container_3 .suffix_2 {
padding-right:66.667%;
}
/* Push Space >> 3 Columns
----------------------------------------------------------------------------------------------------*/
.container_3 .push_1 {
left:33.333%;
}
.container_3 .push_2 {
left:66.667%;
}
/* Pull Space >> 3 Columns
----------------------------------------------------------------------------------------------------*/
.container_3 .pull_1 {
left:-33.333%;
}
.container_3 .pull_2 {
left:-66.667%;
}
/* Clear Floated Elements
----------------------------------------------------------------------------------------------------*/
/* http://sonspring.com/journal/clearing-floats */
.clear {
clear: both;
display: block;
overflow: hidden;
visibility: hidden;
width: 0;
height: 0;
}
/* http://perishablepress.com/press/2008/02/05/lessons-learned-concerning-the-clearfix-css-hack */
.clearfix:after {
clear: both;
content: ' ';
display: block;
font-size: 0;
line-height: 0;
visibility: hidden;
width: 0;
height: 0;
}
.clearfix {
display: inline-block;
}
* html .clearfix {
height: 1%;
}
.clearfix {
display: block;
}

View file

@ -1,59 +0,0 @@
body {
font-size: 12px;
font-family: Verdana, Geneva, sans-serif;
}
.a {
text-decoration: none;
}
.title {
padding: 31px 0 0 0;
}
.group
{
/*background-color: pink;*/
width:966px;
}
.group_header {
color: #0066CB;
font: bold 14pt IntervalLight, sans-serif;
text-decoration: none;
padding: 8px;
background-color: #EEEEEE;
margin-top: 24px;
/*margin-bottom: 8px;*/
}
.products
{
float:left;
/*background:#FFF8F8;*/
}
.product {
/*background: url("../images/panelbg.png") 0 0 no-repeat;*/
width: 300px;
height: 130px;
/*margin-left: 20px;*/
padding: 10px;
border: 1px solid #EEEEEE;
display:block;
float: left;
}
.product span {
font-size: 16px;
color: #0066CB;
margin-bottom: 8px;
clear:both;
}
.product img
{
margin-right:12px;
float:left;
}

View file

@ -1,493 +0,0 @@
tr th .added { color: #E6E6FA; }
tr th .changed {color: #99ff99; }
div.added tr, div.added { background-color: #E6E6FA; }
div.deleted tr, div.deleted { text-decoration: line-through;
background-color: #FF7F7F; }
div.changed tr, div.changed { background-color: #99ff99; }
div.off { }
span.added { background-color: #E6E6FA; }
span.deleted { text-decoration: line-through;
background-color: #FF7F7F; }
span.changed { background-color: #99ff99; }
span.off { }
body { font: 12px Verdana, Geneva, sans-serif; }
p, ul, ol, li { font: 10pt Verdana, Geneva, sans-serif; }
h1 { font: 15pt Arial, Helvetica, geneva;
color: black!important;
}
h2 { font: normal 12pt Arial, Helvetica, geneva; }
#header {
background: white;
position: fixed;
width: 100%;
height: 99px;
top: 0;
right: 0;
bottom: auto;
left: 0;
border-bottom: 1px solid #bbc4c5;
z-index: 2000;
}
#header h1 {
margin-left: 310px;
position: fixed;
top: 20px;
left: -15px;
color: #404040 !important;
}
#header h1 {
margin-top: 2px;
}
p.breadcrumbs {
margin-top: 30px;
margin-left: 310px;
}
#header img {
float: left;
margin-left: 20px;
}
#header p.breadcrumbs a {
color: #bbb;
}
#leftnavigation {
overflow: auto;
position: fixed;
height: auto;
top:100px;
/*right:10px;*/
/*left:10px;*/
bottom: 0;
left: 0;
width:inherit;
z-index: 1500;
border-right:2px solid #bbc4c5;
padding:1px;
background-color: #ededed!important;
}
#treeDiv {
overflow: auto;
/* position: fixed;*/
height: auto;
top: 136px;
bottom: 0;
left: 0;
/* width: 18%;*/
z-index: 1500;
/* border-right:2px solid #CCCCCC;
background-color: #f0f0f0!important;*/
}
/*#searchDiv {
overflow: auto;
position: fixed;
height: auto;
top: 138px;
bottom: 0;
left: 0;
width: 243px;
z-index: 1500;
border-right:2px solid #CCCCCC;
background-color: #f0f0f0!important;
}*/
#content {
position: relative;
top: 90px; /*left: 240px;*/
right: auto; bottom: 20px;
/*margin: 0px 0px 0px 280px;*/
width: auto;
height: inherit;
padding-left: 5px;
padding-right: 30px;
border-left: 1px solid #cccccc;
overflow :scroll;
overflow-x:auto;
z-index: 1000;
}
#navheader {
position: fixed;
background: #DCDCDC;
padding-left: 10px;
right: 0px;
top: 10px;
text-align: right;
}
#content h1, #content h2 {
color: #404040 !important;
font-size: 170%;
font-weight: normal;
}
.navfooter { bottom: 2%; }
.highlight { background-color: #c5d3c3; }
.highlightButton{ font-size: 0; }
/* Show Hide TOC tree */
.pointLeft {
padding-right: 15px;
display: block;
cursor: pointer;
}
.pointRight {
padding-right: 15px;
display: block;
cursor: pointer;
}
/* Search results Styling */
.searchExpression {
color: #0050A0;
background-color: #EBEFF8;
font-size: 12pt;
}
.searchresult li a {
text-decoration: none;
color: #0050A0;
}
.searchresult li { color: #0050A0; }
.shortdesclink { color: gray; font-size: 9pt; }
.searchText { float:left;width:150px; }
.searchButton {
padding: 2px 12px 2px 12px;
background-color:#bbb;
border:#bbb solid 1pt;
font-weight: bold;
font-size: 10pt
}
.searchButton:hover{
background-color: #cccccc;
}
.searchFieldSet {}
.title, div.toc>p{ font-weight: bold; }
p.breadcrumbs {
display: inline;
margin-bottom: 0px;
margin-top: 33px;
}
p.breadcrumbs a {
padding-right: 12px;
margin-right: 5px;
text-decoration: none;
color: #575757;
text-transform: uppercase;
font-size: 10px;
}
p.breadcrumbs a:first-child {background: url(../images/breadcrumb-arrow-white.png) no-repeat right center;}
p.breadcrumbs a:hover {text-decoration: underline;}
#star ul.star {
LIST-STYLE: none;
MARGIN: 0;
PADDING: 0;
WIDTH: 85px;
/* was 100 */
HEIGHT: 20px;
LEFT: 1px;
TOP: -5px;
POSITION: relative;
FLOAT: right;
BACKGROUND: url('../images/starsSmall.png') repeat-x 0 -25px;
}
#star li {
PADDING: 0;
MARGIN: 0;
FLOAT: right;
DISPLAY: block;
WIDTH: 85px;
/* was 100 */
HEIGHT: 20px;
TEXT-DECORATION: none;
text-indent: -9000px;
Z-INDEX: 20;
POSITION: absolute;
PADDING: 0;
}
#star li.curr {
BACKGROUND: url('../images/starsSmall.png') left 25px;
FONT-SIZE: 1px;
}
table.navLinks {margin-right: 20px;}
table.navLinks td a {
text-decoration: none;
text-transform: uppercase;
color: black;
font-size: 11px;
}
a.navLinkPrevious {
padding-left: 12px;
background: url(../images/previous-arrow.png) no-repeat left center;
}
a.navLinkNext {
padding-right: 12px;
background: url(../images/next-arrow.png) no-repeat right center;
}
a#showHideButton {
padding-left: 20px;
background: url(../images/sidebar.png) no-repeat left center;
}
.filetree li span a { color: #777; }
#treediv { -webkit-box-shadow: #CCC 0px 1px 2px 0px inset; }
.legal, .legal *{
color: #555;
text-align: center;
padding-bottom: 10px;
}
.internal { color : #0000CC;}
.writeronly {color : red;}
.remark, .remark .added, .remark .changed, .remark .deleted{ background: yellow;}
tr th, tr th .internal, tr th .added, tr th .changed {
background: #00589E;
color: white;
font-weight: bold;
text-align: left;
}
.statustext{
position:fixed;
top:105px;
width: 0%;
height: 0%;
opacity: .3;
-webkit-transform: rotate(90deg);
-moz-transform: rotate(90deg);
-o-transform: rotate(90deg);
white-space: nowrap;
color: red;
font-weight: bold;
font-size: 2em;
margin-top: 30px;
}
#toolbar {
width: 100%;
height: 33px;
position: fixed;
top: 93px;
z-index: 99;
left: 280px;
color: #333;
line-height: 28px;
padding-left: 10px;
}
#toolbar-left {
position: relative;
left: 0px;
}
body p.breadcrumbs {
margin: 0px;
padding: 0px;
line-height: 28px;
}
/*body #content {
position: static;
margin-top: 126px;
top: 0px;
}*/
body.sidebar #toolbar{left: 0px;}
body.sidebar #toolbar-left{left: 0px;}
div#toolbar-left img {vertical-align: text-top;}
div.note *, div.caution *, div.important *, div.tip *, div.warning * {
background: inherit !important;
color: inherit !important;
border: inherit /*!important*/;
}
#content table thead, #content table th, #content table th p{
color: white;
font-weight: bold;
}
#content table caption{font-weight: bold;}
#content table td, #content table {border: 1px solid black;}
#content table td, #content table th { padding: 5px;}
#content table {margin-bottom: 20px;}
*[align = 'center']{ text-align: center;}
#content .qandaset>table, #content .qandaset>table td, #content .calloutlist table, #content .calloutlist table td, #content .navfooter table, #content .navfooter table td {
border: 0px solid;
}
#sidebar
{
position: fixed;
margin: 0px;
left: 0px;
right: auto;
top: 99px;
bottom: 0px;
height: 543px;
z-index: 0;
display: block;
visibility: visible;
width: 280px;
}
@media print {
body * {
visibility: hidden;
}
#content, #content * {
visibility: visible;
}
#sidebar, .navfooter {
display: none;
}
#content {
margin: 0 0 0 0;
}
}
#expanders {
float: left;
width: 100%;
padding-bottom: 1em;
}
#expanders dt {
padding-bottom: 4px;
border-bottom: 2px solid #cccccc;
margin-top: 1em;
margin-bottom: 1em;
background: url(../images/plus.png) 0px 7px no-repeat;
/*background: pink;*/
cursor: pointer;
}
#expanders dt h2 {
font: bold 14pt IntervalLight, sans-serif;
text-decoration: none;
color: #0066CB;
/*background-position: -16px 0;*/
padding-left: 13px;
}
#expanders dt.plus {
background: url(../images/plus.png) 0px 7px no-repeat;
}
#expanders dt.minus {
background: url(../images/minus.png) 0px 7px no-repeat;
}
#expanders dd {
display: none;
margin-bottom: 3em;
/*background: yellow;*/
}
#expanders .hitarea {
background: url(../images/ui-icons_217bc0_256x240.png) 0 -208px no-repeat;
height: 16px;
width: 16px;
float: left;
cursor: pointer;
}
/* fix for IE6 */
/** html .hitarea {
display: inline;
float:none;
}*/
#expanders .prod
{
width: 300px;
border: #DDD solid 1px;
float: left;
margin: 1px;
height: 160px;
margin-top: 0px;
}
#expanders .prodimg
{
/*border: #DDD solid 1px;*/
float: left;
}
.prodimg img {
display: block;
margin-left: 3px;
margin-top: auto;
margin-bottom: auto;
width: 100px;
vertical-align: middle;
}
#expanders .prodtext
{
/*background: #F8F8F8;*/
width: 165px;
float: left;
margin-left: 1em;
}
#expanders .prod p {
clear: both;
}
#expanders ul {
margin: 0;
padding: 0;
list-style-type: none;
}
#expanders li {
padding-left: 0.5em;
}
a.external {
background: url("../images/external_link.gif") no-repeat scroll right top transparent;
padding: 0 13px 0 0;
}

View file

@ -1,28 +0,0 @@
body {
color : #000000 !important;
background : #ffffff !important;
font-family : "Times New Roman", Times, serif !important;
font-size : 12pt !important;
}
#sidebar, #sidebar-resizer, #header-resizer, #header { display: none !important;}
#content {
position: absolute !important;
margin: 0px !important;
left: 0px !important;
right: auto !important;
top: 0px !important;
height: auto !important;
overflow: visible !important;
overflow-x: visible !important;
border-left: 0px solid #000000 !important;
}
.ui-layout-container {
overflow: visible !important;
}
.mediaobject {
text-align: left !important;
}

View file

@ -1 +0,0 @@
a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,dialog,div,dl,dt,em,embed,fieldset,figcaption,figure,font,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,html,i,iframe,img,ins,kbd,label,legend,li,main,mark,menu,meter,nav,object,ol,output,p,pre,progress,q,rp,rt,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video,xmp{border:0;margin:0;padding:0;font-size:100%}html,body{height:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section{display:block}b,strong{font-weight:bold}img{color:transparent;font-size:0;vertical-align:middle;-ms-interpolation-mode:bicubic}ol,ul{list-style:none}li{display:list-item}table{border-collapse:collapse;border-spacing:0}th,td,caption{font-weight:normal;vertical-align:top;text-align:left}q{quotes:none}q:before,q:after{content:'';content:none}sub,sup,small{font-size:75%}sub,sup{line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}svg{overflow:hidden}

View file

@ -1 +0,0 @@
body{font:13px/1.5 'Helvetica Neue',Arial,'Liberation Sans',FreeSans,sans-serif}pre,code{font-family:'DejaVu Sans Mono',Menlo,Consolas,monospace}hr{border:0 solid #ccc;border-top-width:1px;clear:both;height:0}h1{font-size:25px}h2{font-size:23px}h3{font-size:21px}h4{font-size:19px}h5{font-size:17px}h6{font-size:15px}ol{list-style:decimal}ul{list-style:disc}li{margin-left:30px}p,dl,hr,h1,h2,h3,h4,h5,h6,ol,ul,pre,table,address,fieldset,figure{margin-bottom:20px}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 703 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 583 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 798 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 340 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

File diff suppressed because one or more lines are too long

View file

@ -1,93 +0,0 @@
/**
* Cookie plugin
*
* Copyright (c) 2006 Klaus Hartl (stilbuero.de)
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
*/
/**
* Create a cookie with the given name and value and other optional parameters.
*
* @example $.cookie('the_cookie', 'the_value');
* @desc Set the value of a cookie.
* @example $.cookie('the_cookie', 'the_value', {expires: 7, path: '/', domain: 'jquery.com', secure: true});
* @desc Create a cookie with all available options.
* @example $.cookie('the_cookie', 'the_value');
* @desc Create a session cookie.
* @example $.cookie('the_cookie', null);
* @desc Delete a cookie by passing null as value.
*
* @param String name The name of the cookie.
* @param String value The value of the cookie.
* @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
* @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
* If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
* If set to null or omitted, the cookie will be a session cookie and will not be retained
* when the the browser exits.
* @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
* @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
* @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
* require a secure protocol (like HTTPS).
* @type undefined
*
* @name $.cookie
* @cat Plugins/Cookie
* @author Klaus Hartl/klaus.hartl@stilbuero.de
*/
/**
* Get the value of a cookie with the given name.
*
* @example $.cookie('the_cookie');
* @desc Get the value of a cookie.
*
* @param String name The name of the cookie.
* @return The value of the cookie.
* @type String
*
* @name $.cookie
* @cat Plugins/Cookie
* @author Klaus Hartl/klaus.hartl@stilbuero.de
*/
jQuery.cookie = function(name, value, options) {
if (typeof value != 'undefined') { // name and value given, set cookie
options = options || {};
if (value === null) {
value = '';
options.expires = -1;
}
var expires = '';
if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
var date;
if (typeof options.expires == 'number') {
date = new Date();
date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
} else {
date = options.expires;
}
expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
}
var path = options.path ? '; path=' + options.path : '';
var domain = options.domain ? '; domain=' + options.domain : '';
var secure = options.secure ? '; secure' : '';
document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
} else { // only name given, get cookie
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
};

View file

@ -1,418 +0,0 @@
/*!
* jQuery UI 1.8.18
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI
*/
(function(b,a){function c(c,a){var e=c.nodeName.toLowerCase();if("area"===e){var e=c.parentNode,f=e.name;if(!c.href||!f||"map"!==e.nodeName.toLowerCase())return!1;e=b("img[usemap=#"+f+"]")[0];return!!e&&d(e)}return(/input|select|textarea|button|object/.test(e)?!c.disabled:"a"==e?c.href||a:a)&&d(c)}function d(c){return!b(c).parents().andSelf().filter(function(){return"hidden"===b.curCSS(this,"visibility")||b.expr.filters.hidden(this)}).length}b.ui=b.ui||{};b.ui.version||(b.extend(b.ui,{version:"1.8.14",
keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),b.fn.extend({_focus:b.fn.focus,focus:function(c,a){return"number"===typeof c?this.each(function(){var d=this;setTimeout(function(){b(d).focus();
a&&a.call(d)},c)}):this._focus.apply(this,arguments)},scrollParent:function(){var c;c=b.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(b.curCSS(this,"position",1))&&/(auto|scroll)/.test(b.curCSS(this,"overflow",1)+b.curCSS(this,"overflow-y",1)+b.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(b.curCSS(this,"overflow",1)+b.curCSS(this,
"overflow-y",1)+b.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!c.length?b(document):c},zIndex:function(c){if(c!==a)return this.css("zIndex",c);if(this.length)for(var c=b(this[0]),d;c.length&&c[0]!==document;){d=c.css("position");if("absolute"===d||"relative"===d||"fixed"===d)if(d=parseInt(c.css("zIndex"),10),!isNaN(d)&&0!==d)return d;c=c.parent()}return 0},disableSelection:function(){return this.bind((b.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",
function(b){b.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),b.each(["Width","Height"],function(c,d){function e(c,a,d,g){b.each(f,function(){a-=parseFloat(b.curCSS(c,"padding"+this,!0))||0;d&&(a-=parseFloat(b.curCSS(c,"border"+this+"Width",!0))||0);g&&(a-=parseFloat(b.curCSS(c,"margin"+this,!0))||0)});return a}var f="Width"===d?["Left","Right"]:["Top","Bottom"],i=d.toLowerCase(),j={innerWidth:b.fn.innerWidth,innerHeight:b.fn.innerHeight,outerWidth:b.fn.outerWidth,
outerHeight:b.fn.outerHeight};b.fn["inner"+d]=function(f){return f===a?j["inner"+d].call(this):this.each(function(){b(this).css(i,e(this,f)+"px")})};b.fn["outer"+d]=function(f,c){return"number"!==typeof f?j["outer"+d].call(this,f):this.each(function(){b(this).css(i,e(this,f,!0,c)+"px")})}}),b.extend(b.expr[":"],{data:function(c,a,d){return!!b.data(c,d[3])},focusable:function(a){return c(a,!isNaN(b.attr(a,"tabindex")))},tabbable:function(a){var d=b.attr(a,"tabindex"),e=isNaN(d);return(e||0<=d)&&c(a,
!e)}}),b(function(){var c=document.body,a=c.appendChild(a=document.createElement("div"));b.extend(a.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});b.support.minHeight=100===a.offsetHeight;b.support.selectstart="onselectstart"in a;c.removeChild(a).style.display="none"}),b.extend(b.ui,{plugin:{add:function(c,a,d){var c=b.ui[c].prototype,f;for(f in d)c.plugins[f]=c.plugins[f]||[],c.plugins[f].push([a,d[f]])},call:function(b,c,a){if((c=b.plugins[c])&&b.element[0].parentNode)for(var f=
0;f<c.length;f++)b.options[c[f][0]]&&c[f][1].apply(b.element,a)}},contains:function(b,c){return document.compareDocumentPosition?b.compareDocumentPosition(c)&16:b!==c&&b.contains(c)},hasScroll:function(c,a){if("hidden"===b(c).css("overflow"))return!1;var d=a&&"left"===a?"scrollLeft":"scrollTop",f=!1;if(0<c[d])return!0;c[d]=1;f=0<c[d];c[d]=0;return f},isOverAxis:function(b,c,a){return b>c&&b<c+a},isOver:function(c,a,d,f,i,j){return b.ui.isOverAxis(c,d,i)&&b.ui.isOverAxis(a,f,j)}}))})(jQuery);
(function(b,a){if(b.cleanData){var c=b.cleanData;b.cleanData=function(a){for(var d=0,e;null!=(e=a[d]);d++)b(e).triggerHandler("remove");c(a)}}else{var d=b.fn.remove;b.fn.remove=function(c,a){return this.each(function(){a||(!c||b.filter(c,[this]).length)&&b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return d.call(b(this),c,a)})}}b.widget=function(c,a,d){var f=c.split(".")[0],i,c=c.split(".")[1];i=f+"-"+c;d||(d=a,a=b.Widget);b.expr[":"][i]=function(f){return!!b.data(f,
c)};b[f]=b[f]||{};b[f][c]=function(b,f){arguments.length&&this._createWidget(b,f)};a=new a;a.options=b.extend(!0,{},a.options);b[f][c].prototype=b.extend(!0,a,{namespace:f,widgetName:c,widgetEventPrefix:b[f][c].prototype.widgetEventPrefix||c,widgetBaseClass:i},d);b.widget.bridge(c,b[f][c])};b.widget.bridge=function(c,d){b.fn[c]=function(e){var f="string"===typeof e,i=Array.prototype.slice.call(arguments,1),j=this,e=!f&&i.length?b.extend.apply(null,[!0,e].concat(i)):e;if(f&&"_"===e.charAt(0))return j;
f?this.each(function(){var f=b.data(this,c),d=f&&b.isFunction(f[e])?f[e].apply(f,i):f;if(d!==f&&d!==a)return j=d,!1}):this.each(function(){var f=b.data(this,c);f?f.option(e||{})._init():b.data(this,c,new d(e,this))});return j}};b.Widget=function(b,c){arguments.length&&this._createWidget(b,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(c,a){b.data(a,this.widgetName,this);this.element=b(a);this.options=b.extend(!0,{},this.options,this._getCreateOptions(),
c);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},
option:function(c,d){var e=c;if(0===arguments.length)return b.extend({},this.options);if("string"===typeof c){if(d===a)return this.options[c];e={};e[c]=d}this._setOptions(e);return this},_setOptions:function(c){var a=this;b.each(c,function(b,f){a._setOption(b,f)});return this},_setOption:function(b,c){this.options[b]=c;"disabled"===b&&this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",
!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(c,a,d){var f=this.options[c],a=b.Event(a);a.type=(c===this.widgetEventPrefix?c:this.widgetEventPrefix+c).toLowerCase();d=d||{};if(a.originalEvent)for(var c=b.event.props.length,i;c;)i=b.event.props[--c],a[i]=a.originalEvent[i];this.element.trigger(a,d);return!(b.isFunction(f)&&!1===f.call(this.element[0],a,d)||a.isDefaultPrevented())}}})(jQuery);
(function(b){var a=!1;b(document).mousedown(function(){a=!1});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var c=this;this.element.bind("mousedown."+this.widgetName,function(b){return c._mouseDown(b)}).bind("click."+this.widgetName,function(a){if(!0===b.data(a.target,c.widgetName+".preventClickEvent"))return b.removeData(a.target,c.widgetName+".preventClickEvent"),a.stopImmediatePropagation(),!1});this.started=!1},_mouseDestroy:function(){this.element.unbind("."+
this.widgetName)},_mouseDown:function(c){if(!a){this._mouseStarted&&this._mouseUp(c);this._mouseDownEvent=c;var d=this,g=1==c.which,h="string"==typeof this.options.cancel?b(c.target).closest(this.options.cancel).length:!1;if(!g||h||!this._mouseCapture(c))return!0;this.mouseDelayMet=!this.options.delay;this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(c)&&this._mouseDelayMet(c)&&(this._mouseStarted=!1!==this._mouseStart(c),
!this._mouseStarted))return c.preventDefault(),!0;!0===b.data(c.target,this.widgetName+".preventClickEvent")&&b.removeData(c.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(b){return d._mouseMove(b)};this._mouseUpDelegate=function(b){return d._mouseUp(b)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);c.preventDefault();return a=!0}},_mouseMove:function(c){if(b.browser.msie&&!(9<=document.documentMode)&&
!c.button)return this._mouseUp(c);if(this._mouseStarted)return this._mouseDrag(c),c.preventDefault();this._mouseDistanceMet(c)&&this._mouseDelayMet(c)&&((this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,c))?this._mouseDrag(c):this._mouseUp(c));return!this._mouseStarted},_mouseUp:function(c){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);this._mouseStarted&&(this._mouseStarted=!1,c.target==this._mouseDownEvent.target&&
b.data(c.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(c));return!1},_mouseDistanceMet:function(b){return Math.max(Math.abs(this._mouseDownEvent.pageX-b.pageX),Math.abs(this._mouseDownEvent.pageY-b.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);
(function(b){b.ui=b.ui||{};var a=/left|center|right/,c=/top|center|bottom/,d=b.fn.position,g=b.fn.offset;b.fn.position=function(g){if(!g||!g.of)return d.apply(this,arguments);var g=b.extend({},g),e=b(g.of),f=e[0],i=(g.collision||"flip").split(" "),j=g.offset?g.offset.split(" "):[0,0],k,l,m;9===f.nodeType?(k=e.width(),l=e.height(),m={top:0,left:0}):f.setTimeout?(k=e.width(),l=e.height(),m={top:e.scrollTop(),left:e.scrollLeft()}):f.preventDefault?(g.at="left top",k=l=0,m={top:g.of.pageY,left:g.of.pageX}):
(k=e.outerWidth(),l=e.outerHeight(),m=e.offset());b.each(["my","at"],function(){var b=(g[this]||"").split(" ");b.length===1&&(b=a.test(b[0])?b.concat(["center"]):c.test(b[0])?["center"].concat(b):["center","center"]);b[0]=a.test(b[0])?b[0]:"center";b[1]=c.test(b[1])?b[1]:"center";g[this]=b});1===i.length&&(i[1]=i[0]);j[0]=parseInt(j[0],10)||0;1===j.length&&(j[1]=j[0]);j[1]=parseInt(j[1],10)||0;"right"===g.at[0]?m.left+=k:"center"===g.at[0]&&(m.left+=k/2);"bottom"===g.at[1]?m.top+=l:"center"===g.at[1]&&
(m.top+=l/2);m.left+=j[0];m.top+=j[1];return this.each(function(){var f=b(this),c=f.outerWidth(),a=f.outerHeight(),d=parseInt(b.curCSS(this,"marginLeft",true))||0,e=parseInt(b.curCSS(this,"marginTop",true))||0,r=c+d+(parseInt(b.curCSS(this,"marginRight",true))||0),u=a+e+(parseInt(b.curCSS(this,"marginBottom",true))||0),s=b.extend({},m),v;if(g.my[0]==="right")s.left=s.left-c;else if(g.my[0]==="center")s.left=s.left-c/2;if(g.my[1]==="bottom")s.top=s.top-a;else if(g.my[1]==="center")s.top=s.top-a/2;
s.left=Math.round(s.left);s.top=Math.round(s.top);v={left:s.left-d,top:s.top-e};b.each(["left","top"],function(f,d){if(b.ui.position[i[f]])b.ui.position[i[f]][d](s,{targetWidth:k,targetHeight:l,elemWidth:c,elemHeight:a,collisionPosition:v,collisionWidth:r,collisionHeight:u,offset:j,my:g.my,at:g.at})});b.fn.bgiframe&&f.bgiframe();f.offset(b.extend(s,{using:g.using}))})};b.ui.position={fit:{left:function(c,a){var f=b(window),f=a.collisionPosition.left+a.collisionWidth-f.width()-f.scrollLeft();c.left=
0<f?c.left-f:Math.max(c.left-a.collisionPosition.left,c.left)},top:function(c,a){var f=b(window),f=a.collisionPosition.top+a.collisionHeight-f.height()-f.scrollTop();c.top=0<f?c.top-f:Math.max(c.top-a.collisionPosition.top,c.top)}},flip:{left:function(c,a){if("center"!==a.at[0]){var f=b(window),f=a.collisionPosition.left+a.collisionWidth-f.width()-f.scrollLeft(),d="left"===a.my[0]?-a.elemWidth:"right"===a.my[0]?a.elemWidth:0,g="left"===a.at[0]?a.targetWidth:-a.targetWidth,k=-2*a.offset[0];c.left+=
0>a.collisionPosition.left?d+g+k:0<f?d+g+k:0}},top:function(c,a){if("center"!==a.at[1]){var f=b(window),f=a.collisionPosition.top+a.collisionHeight-f.height()-f.scrollTop(),d="top"===a.my[1]?-a.elemHeight:"bottom"===a.my[1]?a.elemHeight:0,g="top"===a.at[1]?a.targetHeight:-a.targetHeight,k=-2*a.offset[1];c.top+=0>a.collisionPosition.top?d+g+k:0<f?d+g+k:0}}}};b.offset.setOffset||(b.offset.setOffset=function(c,a){/static/.test(b.curCSS(c,"position"))&&(c.style.position="relative");var f=b(c),d=f.offset(),
g=parseInt(b.curCSS(c,"top",!0),10)||0,k=parseInt(b.curCSS(c,"left",!0),10)||0,d={top:a.top-d.top+g,left:a.left-d.left+k};"using"in a?a.using.call(c,d):f.css(d)},b.fn.offset=function(c){var a=this[0];return!a||!a.ownerDocument?null:c?this.each(function(){b.offset.setOffset(this,c)}):g.call(this)})})(jQuery);
(function(b){b.widget("ui.draggable",b.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1},_create:function(){"original"==this.options.helper&&!/^(?:r|a|f)/.test(this.element.css("position"))&&
(this.element[0].style.position="relative");this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable"))return this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy(),this},_mouseCapture:function(a){var c=this.options;if(this.helper||c.disabled||b(a.target).is(".ui-resizable-handle"))return!1;
this.handle=this._getHandle(a);if(!this.handle)return!1;b(!0===c.iframeFix?"iframe":c.iframeFix).each(function(){b('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(b(this).offset()).appendTo("body")});return!0},_mouseStart:function(a){var c=this.options;this.helper=this._createHelper(a);this._cacheHelperProportions();b.ui.ddmanager&&(b.ui.ddmanager.current=this);
this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};b.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=
a.pageY;c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt);c.containment&&this._setContainment();if(!1===this._trigger("start",a))return this._clear(),!1;this._cacheHelperProportions();b.ui.ddmanager&&!c.dropBehaviour&&b.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,!0);b.ui.ddmanager&&b.ui.ddmanager.dragStart(this,a);return!0},_mouseDrag:function(a,c){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");
if(!c){var d=this._uiHash();if(!1===this._trigger("drag",a,d))return this._mouseUp({}),!1;this.position=d.position}if(!this.options.axis||"y"!=this.options.axis)this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||"x"!=this.options.axis)this.helper[0].style.top=this.position.top+"px";b.ui.ddmanager&&b.ui.ddmanager.drag(this,a);return!1},_mouseStop:function(a){var c=!1;b.ui.ddmanager&&!this.options.dropBehaviour&&(c=b.ui.ddmanager.drop(this,a));this.dropped&&(c=this.dropped,this.dropped=
!1);if((!this.element[0]||!this.element[0].parentNode)&&"original"==this.options.helper)return!1;if("invalid"==this.options.revert&&!c||"valid"==this.options.revert&&c||!0===this.options.revert||b.isFunction(this.options.revert)&&this.options.revert.call(this.element,c)){var d=this;b(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){d._trigger("stop",a)!==false&&d._clear()})}else!1!==this._trigger("stop",a)&&this._clear();return!1},_mouseUp:function(a){!0===
this.options.iframeFix&&b("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});b.ui.ddmanager&&b.ui.ddmanager.dragStop(this,a);return b.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var c=!this.options.handle||!b(this.options.handle,this.element).length?!0:!1;b(this.options.handle,this.element).find("*").andSelf().each(function(){this==a.target&&(c=
!0)});return c},_createHelper:function(a){var c=this.options,a=b.isFunction(c.helper)?b(c.helper.apply(this.element[0],[a])):"clone"==c.helper?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo("parent"==c.appendTo?this.element[0].parentNode:c.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){"string"==typeof a&&(a=a.split(" "));b.isArray(a)&&(a={left:+a[0],top:+a[1]||
0});"left"in a&&(this.offset.click.left=a.left+this.margins.left);"right"in a&&(this.offset.click.left=this.helperProportions.width-a.right+this.margins.left);"top"in a&&(this.offset.click.top=a.top+this.margins.top);"bottom"in a&&(this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();"absolute"==this.cssPosition&&(this.scrollParent[0]!=document&&b.ui.contains(this.scrollParent[0],
this.offsetParent[0]))&&(a.left+=this.scrollParent.scrollLeft(),a.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&"html"==this.offsetParent[0].tagName.toLowerCase()&&b.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"==this.cssPosition){var b=this.element.position();return{top:b.top-
(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),
height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;"parent"==a.containment&&(a.containment=this.helper[0].parentNode);if("document"==a.containment||"window"==a.containment)this.containment=["document"==a.containment?0:b(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,"document"==a.containment?0:b(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,("document"==a.containment?0:b(window).scrollLeft())+b("document"==a.containment?document:
window).width()-this.helperProportions.width-this.margins.left,("document"==a.containment?0:b(window).scrollTop())+(b("document"==a.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){var a=b(a.containment),c=a[0];if(c){a.offset();var d="hidden"!=b(c).css("overflow");this.containment=[(parseInt(b(c).css("borderLeftWidth"),10)||0)+(parseInt(b(c).css("paddingLeft"),
10)||0),(parseInt(b(c).css("borderTopWidth"),10)||0)+(parseInt(b(c).css("paddingTop"),10)||0),(d?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(b(c).css("borderLeftWidth"),10)||0)-(parseInt(b(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(d?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(b(c).css("borderTopWidth"),10)||0)-(parseInt(b(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];
this.relative_container=a}}else a.containment.constructor==Array&&(this.containment=a.containment)},_convertPositionTo:function(a,c){c||(c=this.position);var d="absolute"==a?1:-1,g="absolute"==this.cssPosition&&!(this.scrollParent[0]!=document&&b.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(g[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(b.browser.safari&&526>b.browser.version&&"fixed"==this.cssPosition?
0:("fixed"==this.cssPosition?-this.scrollParent.scrollTop():h?0:g.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(b.browser.safari&&526>b.browser.version&&"fixed"==this.cssPosition?0:("fixed"==this.cssPosition?-this.scrollParent.scrollLeft():h?0:g.scrollLeft())*d)}},_generatePosition:function(a){var c=this.options,d="absolute"==this.cssPosition&&!(this.scrollParent[0]!=document&&b.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,
g=/(html|body)/i.test(d[0].tagName),h=a.pageX,e=a.pageY;if(this.originalPosition){var f;this.containment&&(this.relative_container?(f=this.relative_container.offset(),f=[this.containment[0]+f.left,this.containment[1]+f.top,this.containment[2]+f.left,this.containment[3]+f.top]):f=this.containment,a.pageX-this.offset.click.left<f[0]&&(h=f[0]+this.offset.click.left),a.pageY-this.offset.click.top<f[1]&&(e=f[1]+this.offset.click.top),a.pageX-this.offset.click.left>f[2]&&(h=f[2]+this.offset.click.left),
a.pageY-this.offset.click.top>f[3]&&(e=f[3]+this.offset.click.top));c.grid&&(e=c.grid[1]?this.originalPageY+Math.round((e-this.originalPageY)/c.grid[1])*c.grid[1]:this.originalPageY,e=f?!(e-this.offset.click.top<f[1]||e-this.offset.click.top>f[3])?e:!(e-this.offset.click.top<f[1])?e-c.grid[1]:e+c.grid[1]:e,h=c.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/c.grid[0])*c.grid[0]:this.originalPageX,h=f?!(h-this.offset.click.left<f[0]||h-this.offset.click.left>f[2])?h:!(h-this.offset.click.left<
f[0])?h-c.grid[0]:h+c.grid[0]:h)}return{top:e-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(b.browser.safari&&526>b.browser.version&&"fixed"==this.cssPosition?0:"fixed"==this.cssPosition?-this.scrollParent.scrollTop():g?0:d.scrollTop()),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(b.browser.safari&&526>b.browser.version&&"fixed"==this.cssPosition?0:"fixed"==this.cssPosition?-this.scrollParent.scrollLeft():g?0:d.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");
this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=!1},_trigger:function(a,c,d){d=d||this._uiHash();b.ui.plugin.call(this,a,[c,d]);"drag"==a&&(this.positionAbs=this._convertPositionTo("absolute"));return b.Widget.prototype._trigger.call(this,a,c,d)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});b.extend(b.ui.draggable,{version:"1.8.14"});
b.ui.plugin.add("draggable","connectToSortable",{start:function(a,c){var d=b(this).data("draggable"),g=d.options,h=b.extend({},c,{item:d.element});d.sortables=[];b(g.connectToSortable).each(function(){var c=b.data(this,"sortable");c&&!c.options.disabled&&(d.sortables.push({instance:c,shouldRevert:c.options.revert}),c.refreshPositions(),c._trigger("activate",a,h))})},stop:function(a,c){var d=b(this).data("draggable"),g=b.extend({},c,{item:d.element});b.each(d.sortables,function(){this.instance.isOver?
(this.instance.isOver=0,d.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=!0),this.instance._mouseStop(a),this.instance.options.helper=this.instance.options._helper,"original"==d.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",a,g))})},drag:function(a,c){var d=b(this).data("draggable"),g=this;b.each(d.sortables,function(){this.instance.positionAbs=
d.positionAbs;this.instance.helperProportions=d.helperProportions;this.instance.offset.click=d.offset.click;this.instance._intersectsWith(this.instance.containerCache)?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=b(g).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return c.helper[0]},a.target=this.instance.currentItem[0],this.instance._mouseCapture(a,
!0),this.instance._mouseStart(a,!0,!0),this.instance.offset.click.top=d.offset.click.top,this.instance.offset.click.left=d.offset.click.left,this.instance.offset.parent.left-=d.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=d.offset.parent.top-this.instance.offset.parent.top,d._trigger("toSortable",a),d.dropped=this.instance.element,d.currentItem=d.element,this.instance.fromOutside=d),this.instance.currentItem&&this.instance._mouseDrag(a)):this.instance.isOver&&
(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",a,this.instance._uiHash(this.instance)),this.instance._mouseStop(a,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),d._trigger("fromSortable",a),d.dropped=!1)})}});b.ui.plugin.add("draggable","cursor",{start:function(){var a=b("body"),c=b(this).data("draggable").options;
a.css("cursor")&&(c._cursor=a.css("cursor"));a.css("cursor",c.cursor)},stop:function(){var a=b(this).data("draggable").options;a._cursor&&b("body").css("cursor",a._cursor)}});b.ui.plugin.add("draggable","opacity",{start:function(a,c){var d=b(c.helper),g=b(this).data("draggable").options;d.css("opacity")&&(g._opacity=d.css("opacity"));d.css("opacity",g.opacity)},stop:function(a,c){var d=b(this).data("draggable").options;d._opacity&&b(c.helper).css("opacity",d._opacity)}});b.ui.plugin.add("draggable",
"scroll",{start:function(){var a=b(this).data("draggable");a.scrollParent[0]!=document&&"HTML"!=a.scrollParent[0].tagName&&(a.overflowOffset=a.scrollParent.offset())},drag:function(a){var c=b(this).data("draggable"),d=c.options,g=!1;if(c.scrollParent[0]!=document&&"HTML"!=c.scrollParent[0].tagName){if(!d.axis||"x"!=d.axis)c.overflowOffset.top+c.scrollParent[0].offsetHeight-a.pageY<d.scrollSensitivity?c.scrollParent[0].scrollTop=g=c.scrollParent[0].scrollTop+d.scrollSpeed:a.pageY-c.overflowOffset.top<
d.scrollSensitivity&&(c.scrollParent[0].scrollTop=g=c.scrollParent[0].scrollTop-d.scrollSpeed);if(!d.axis||"y"!=d.axis)c.overflowOffset.left+c.scrollParent[0].offsetWidth-a.pageX<d.scrollSensitivity?c.scrollParent[0].scrollLeft=g=c.scrollParent[0].scrollLeft+d.scrollSpeed:a.pageX-c.overflowOffset.left<d.scrollSensitivity&&(c.scrollParent[0].scrollLeft=g=c.scrollParent[0].scrollLeft-d.scrollSpeed)}else{if(!d.axis||"x"!=d.axis)a.pageY-b(document).scrollTop()<d.scrollSensitivity?g=b(document).scrollTop(b(document).scrollTop()-
d.scrollSpeed):b(window).height()-(a.pageY-b(document).scrollTop())<d.scrollSensitivity&&(g=b(document).scrollTop(b(document).scrollTop()+d.scrollSpeed));if(!d.axis||"y"!=d.axis)a.pageX-b(document).scrollLeft()<d.scrollSensitivity?g=b(document).scrollLeft(b(document).scrollLeft()-d.scrollSpeed):b(window).width()-(a.pageX-b(document).scrollLeft())<d.scrollSensitivity&&(g=b(document).scrollLeft(b(document).scrollLeft()+d.scrollSpeed))}!1!==g&&(b.ui.ddmanager&&!d.dropBehaviour)&&b.ui.ddmanager.prepareOffsets(c,
a)}});b.ui.plugin.add("draggable","snap",{start:function(){var a=b(this).data("draggable"),c=a.options;a.snapElements=[];b(c.snap.constructor!=String?c.snap.items||":data(draggable)":c.snap).each(function(){var c=b(this),g=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,width:c.outerWidth(),height:c.outerHeight(),top:g.top,left:g.left})})},drag:function(a,c){for(var d=b(this).data("draggable"),g=d.options,h=g.snapTolerance,e=c.offset.left,f=e+d.helperProportions.width,i=c.offset.top,
j=i+d.helperProportions.height,k=d.snapElements.length-1;0<=k;k--){var l=d.snapElements[k].left,m=l+d.snapElements[k].width,p=d.snapElements[k].top,n=p+d.snapElements[k].height;if(l-h<e&&e<m+h&&p-h<i&&i<n+h||l-h<e&&e<m+h&&p-h<j&&j<n+h||l-h<f&&f<m+h&&p-h<i&&i<n+h||l-h<f&&f<m+h&&p-h<j&&j<n+h){if("inner"!=g.snapMode){var q=Math.abs(p-j)<=h,o=Math.abs(n-i)<=h,w=Math.abs(l-f)<=h,r=Math.abs(m-e)<=h;q&&(c.position.top=d._convertPositionTo("relative",{top:p-d.helperProportions.height,left:0}).top-d.margins.top);
o&&(c.position.top=d._convertPositionTo("relative",{top:n,left:0}).top-d.margins.top);w&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l-d.helperProportions.width}).left-d.margins.left);r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m}).left-d.margins.left)}var u=q||o||w||r;if("outer"!=g.snapMode&&(q=Math.abs(p-i)<=h,o=Math.abs(n-j)<=h,w=Math.abs(l-e)<=h,r=Math.abs(m-f)<=h,q&&(c.position.top=d._convertPositionTo("relative",{top:p,left:0}).top-d.margins.top),o&&(c.position.top=
d._convertPositionTo("relative",{top:n-d.helperProportions.height,left:0}).top-d.margins.top),w&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l}).left-d.margins.left),r))c.position.left=d._convertPositionTo("relative",{top:0,left:m-d.helperProportions.width}).left-d.margins.left;!d.snapElements[k].snapping&&(q||o||w||r||u)&&d.options.snap.snap&&d.options.snap.snap.call(d.element,a,b.extend(d._uiHash(),{snapItem:d.snapElements[k].item}));d.snapElements[k].snapping=q||o||w||r||u}else d.snapElements[k].snapping&&
d.options.snap.release&&d.options.snap.release.call(d.element,a,b.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=!1}}});b.ui.plugin.add("draggable","stack",{start:function(){var a=b(this).data("draggable").options,a=b.makeArray(b(a.stack)).sort(function(c,a){return(parseInt(b(c).css("zIndex"),10)||0)-(parseInt(b(a).css("zIndex"),10)||0)});if(a.length){var c=parseInt(a[0].style.zIndex)||0;b(a).each(function(b){this.style.zIndex=c+b});this[0].style.zIndex=c+a.length}}});
b.ui.plugin.add("draggable","zIndex",{start:function(a,c){var d=b(c.helper),g=b(this).data("draggable").options;d.css("zIndex")&&(g._zIndex=d.css("zIndex"));d.css("zIndex",g.zIndex)},stop:function(a,c){var d=b(this).data("draggable").options;d._zIndex&&b(c.helper).css("zIndex",d._zIndex)}})})(jQuery);
(function(b){b.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,c=a.accept;this.isover=0;this.isout=1;this.accept=b.isFunction(c)?c:function(b){return b.is(c)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};b.ui.ddmanager.droppables[a.scope]=b.ui.ddmanager.droppables[a.scope]||[];b.ui.ddmanager.droppables[a.scope].push(this);
a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=b.ui.ddmanager.droppables[this.options.scope],c=0;c<a.length;c++)a[c]==this&&a.splice(c,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,c){"accept"==a&&(this.accept=b.isFunction(c)?c:function(b){return b.is(c)});b.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var c=b.ui.ddmanager.current;this.options.activeClass&&
this.element.addClass(this.options.activeClass);c&&this._trigger("activate",a,this.ui(c))},_deactivate:function(a){var c=b.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);c&&this._trigger("deactivate",a,this.ui(c))},_over:function(a){var c=b.ui.ddmanager.current;if(c&&(c.currentItem||c.element)[0]!=this.element[0])if(this.accept.call(this.element[0],c.currentItem||c.element))this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",
a,this.ui(c))},_out:function(a){var c=b.ui.ddmanager.current;if(c&&(c.currentItem||c.element)[0]!=this.element[0])if(this.accept.call(this.element[0],c.currentItem||c.element))this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",a,this.ui(c))},_drop:function(a,c){var d=c||b.ui.ddmanager.current;if(!d||(d.currentItem||d.element)[0]==this.element[0])return!1;var g=!1;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var c=b.data(this,
"droppable");if(c.options.greedy&&!c.options.disabled&&c.options.scope==d.options.scope&&c.accept.call(c.element[0],d.currentItem||d.element)&&b.ui.intersect(d,b.extend(c,{offset:c.element.offset()}),c.options.tolerance))return g=!0,!1});return g?!1:this.accept.call(this.element[0],d.currentItem||d.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",a,this.ui(d)),this.element):
!1},ui:function(b){return{draggable:b.currentItem||b.element,helper:b.helper,position:b.position,offset:b.positionAbs}}});b.extend(b.ui.droppable,{version:"1.8.14"});b.ui.intersect=function(a,c,d){if(!c.offset)return!1;var g=(a.positionAbs||a.position.absolute).left,h=g+a.helperProportions.width,e=(a.positionAbs||a.position.absolute).top,f=e+a.helperProportions.height,i=c.offset.left,j=i+c.proportions.width,k=c.offset.top,l=k+c.proportions.height;switch(d){case "fit":return i<=g&&h<=j&&k<=e&&f<=l;
case "intersect":return i<g+a.helperProportions.width/2&&h-a.helperProportions.width/2<j&&k<e+a.helperProportions.height/2&&f-a.helperProportions.height/2<l;case "pointer":return b.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,k,i,c.proportions.height,c.proportions.width);case "touch":return(e>=k&&e<=l||f>=k&&f<=l||e<k&&f>l)&&(g>=i&&g<=j||h>=i&&h<=j||g<i&&h>j);default:return!1}};
b.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,c){var d=b.ui.ddmanager.droppables[a.options.scope]||[],g=c?c.type:null,h=(a.currentItem||a.element).find(":data(droppable)").andSelf(),e=0;a:for(;e<d.length;e++)if(!(d[e].options.disabled||a&&!d[e].accept.call(d[e].element[0],a.currentItem||a.element))){for(var f=0;f<h.length;f++)if(h[f]==d[e].element[0]){d[e].proportions.height=0;continue a}d[e].visible="none"!=d[e].element.css("display");d[e].visible&&("mousedown"==
g&&d[e]._activate.call(d[e],c),d[e].offset=d[e].element.offset(),d[e].proportions={width:d[e].element[0].offsetWidth,height:d[e].element[0].offsetHeight})}},drop:function(a,c){var d=!1;b.each(b.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options&&(!this.options.disabled&&(this.visible&&b.ui.intersect(a,this,this.options.tolerance))&&(d=d||this._drop.call(this,c)),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||a.element)))this.isout=1,this.isover=
0,this._deactivate.call(this,c)});return d},dragStart:function(a,c){a.element.parentsUntil("body").bind("scroll.droppable",function(){a.options.refreshPositions||b.ui.ddmanager.prepareOffsets(a,c)})},drag:function(a,c){a.options.refreshPositions&&b.ui.ddmanager.prepareOffsets(a,c);b.each(b.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var d=b.ui.intersect(a,this,this.options.tolerance);if(d=!d&&1==this.isover?"isout":d&&0==this.isover?
"isover":null){var g;if(this.options.greedy){var h=this.element.parents(":data(droppable):eq(0)");h.length&&(g=b.data(h[0],"droppable"),g.greedyChild="isover"==d?1:0)}g&&"isover"==d&&(g.isover=0,g.isout=1,g._out.call(g,c));this[d]=1;this["isout"==d?"isover":"isout"]=0;this["isover"==d?"_over":"_out"].call(this,c);g&&"isout"==d&&(g.isout=0,g.isover=1,g._over.call(g,c))}}})},dragStop:function(a,c){a.element.parentsUntil("body").unbind("scroll.droppable");a.options.refreshPositions||b.ui.ddmanager.prepareOffsets(a,
c)}}})(jQuery);
(function(b){b.widget("ui.resizable",b.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var c=this,a=this.options;this.element.addClass("ui-resizable");b.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],
_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(/relative/.test(this.element.css("position"))&&b.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"}),this.element.wrap(b('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),
this.element=this.element.parent().data("resizable",this.element.data("resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize",
"none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize());this.handles=a.handles||(!b(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){"all"==
this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw");var h=this.handles.split(",");this.handles={};for(var e=0;e<h.length;e++){var f=b.trim(h[e]),i=b('<div class="ui-resizable-handle ui-resizable-'+f+'"></div>');/sw|se|ne|nw/.test(f)&&i.css({zIndex:++a.zIndex});"se"==f&&i.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(i)}}this._renderAxis=function(f){var f=f||this.element,c;for(c in this.handles){this.handles[c].constructor==String&&(this.handles[c]=
b(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var a=b(this.handles[c],this.element),d=0,d=/sw|ne|nw|se|n|s/.test(c)?a.outerHeight():a.outerWidth(),a=["padding",/ne|nw|n/.test(c)?"Top":/se|sw|s/.test(c)?"Bottom":/^e$/.test(c)?"Right":"Left"].join("");f.css(a,d);this._proportionallyResize()}b(this.handles[c])}};this._renderAxis(this.element);this._handles=b(".ui-resizable-handle",this.element).disableSelection();
this._handles.mouseover(function(){if(!c.resizing){if(this.className)var b=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);c.axis=b&&b[1]?b[1]:"se"}});a.autoHide&&(this._handles.hide(),b(this.element).addClass("ui-resizable-autohide").hover(function(){if(!a.disabled){b(this).removeClass("ui-resizable-autohide");c._handles.show()}},function(){if(!a.disabled&&!c.resizing){b(this).addClass("ui-resizable-autohide");c._handles.hide()}}));this._mouseInit()},destroy:function(){this._mouseDestroy();
var c=function(c){b(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){c(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);c(this.originalElement);return this},_mouseCapture:function(c){var a=
!1,h;for(h in this.handles)b(this.handles[h])[0]==c.target&&(a=!0);return!this.options.disabled&&a},_mouseStart:function(c){var g=this.options,h=this.element.position(),e=this.element;this.resizing=!0;this.documentScroll={top:b(document).scrollTop(),left:b(document).scrollLeft()};(e.is(".ui-draggable")||/absolute/.test(e.css("position")))&&e.css({position:"absolute",top:h.top,left:h.left});b.browser.opera&&/relative/.test(e.css("position"))&&e.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();
var h=a(this.helper.css("left")),f=a(this.helper.css("top"));g.containment&&(h+=b(g.containment).scrollLeft()||0,f+=b(g.containment).scrollTop()||0);this.offset=this.helper.offset();this.position={left:h,top:f};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:h,top:f};this.sizeDiff={width:e.outerWidth()-
e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:c.pageX,top:c.pageY};this.aspectRatio="number"==typeof g.aspectRatio?g.aspectRatio:this.originalSize.width/this.originalSize.height||1;g=b(".ui-resizable-"+this.axis).css("cursor");b("body").css("cursor","auto"==g?this.axis+"-resize":g);e.addClass("ui-resizable-resizing");this._propagate("start",c);return!0},_mouseDrag:function(b){var c=this.helper,a=this.originalMousePosition,e=this._change[this.axis];if(!e)return!1;a=
e.apply(this,[b,b.pageX-a.left||0,b.pageY-a.top||0]);this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)a=this._updateRatio(a,b);a=this._respectSize(a,b);this._propagate("resize",b);c.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(a);this._trigger("resize",b,this.ui());return!1},_mouseStop:function(c){this.resizing=
!1;var a=this.options;if(this._helper){var h=this._proportionallyResizeElements,e=h.length&&/textarea/i.test(h[0].nodeName),h=e&&b.ui.hasScroll(h[0],"left")?0:this.sizeDiff.height,e=e?0:this.sizeDiff.width,e={width:this.helper.width()-e,height:this.helper.height()-h},h=parseInt(this.element.css("left"),10)+(this.position.left-this.originalPosition.left)||null,f=parseInt(this.element.css("top"),10)+(this.position.top-this.originalPosition.top)||null;a.animate||this.element.css(b.extend(e,{top:f,left:h}));
this.helper.height(this.size.height);this.helper.width(this.size.width);this._helper&&!a.animate&&this._proportionallyResize()}b("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",c);this._helper&&this.helper.remove();return!1},_updateVirtualBoundaries:function(b){var a=this.options,h,e,f,a={minWidth:c(a.minWidth)?a.minWidth:0,maxWidth:c(a.maxWidth)?a.maxWidth:Infinity,minHeight:c(a.minHeight)?a.minHeight:0,maxHeight:c(a.maxHeight)?a.maxHeight:Infinity};
if(this._aspectRatio||b)if(b=a.minHeight*this.aspectRatio,e=a.minWidth/this.aspectRatio,h=a.maxHeight*this.aspectRatio,f=a.maxWidth/this.aspectRatio,b>a.minWidth&&(a.minWidth=b),e>a.minHeight&&(a.minHeight=e),h<a.maxWidth&&(a.maxWidth=h),f<a.maxHeight)a.maxHeight=f;this._vBoundaries=a},_updateCache:function(b){this.offset=this.helper.offset();c(b.left)&&(this.position.left=b.left);c(b.top)&&(this.position.top=b.top);c(b.height)&&(this.size.height=b.height);c(b.width)&&(this.size.width=b.width)},_updateRatio:function(b){var a=
this.position,h=this.size,e=this.axis;c(b.height)?b.width=b.height*this.aspectRatio:c(b.width)&&(b.height=b.width/this.aspectRatio);"sw"==e&&(b.left=a.left+(h.width-b.width),b.top=null);"nw"==e&&(b.top=a.top+(h.height-b.height),b.left=a.left+(h.width-b.width));return b},_respectSize:function(b){var a=this._vBoundaries,h=this.axis,e=c(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=c(b.height)&&a.maxHeight&&a.maxHeight<b.height,i=c(b.width)&&a.minWidth&&a.minWidth>b.width,j=c(b.height)&&a.minHeight&&a.minHeight>
b.height;i&&(b.width=a.minWidth);j&&(b.height=a.minHeight);e&&(b.width=a.maxWidth);f&&(b.height=a.maxHeight);var k=this.originalPosition.left+this.originalSize.width,l=this.position.top+this.size.height,m=/sw|nw|w/.test(h),h=/nw|ne|n/.test(h);i&&m&&(b.left=k-a.minWidth);e&&m&&(b.left=k-a.maxWidth);j&&h&&(b.top=l-a.minHeight);f&&h&&(b.top=l-a.maxHeight);(a=!b.width&&!b.height)&&!b.left&&b.top?b.top=null:a&&(!b.top&&b.left)&&(b.left=null);return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var c=
this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var h=this._proportionallyResizeElements[a];if(!this.borderDif){var e=[h.css("borderTopWidth"),h.css("borderRightWidth"),h.css("borderBottomWidth"),h.css("borderLeftWidth")],f=[h.css("paddingTop"),h.css("paddingRight"),h.css("paddingBottom"),h.css("paddingLeft")];this.borderDif=b.map(e,function(b,c){var a=parseInt(b,10)||0,d=parseInt(f[c],10)||0;return a+d})}if(!b.browser.msie||!b(c).is(":hidden")&&!b(c).parents(":hidden").length)h.css({height:c.height()-
this.borderDif[0]-this.borderDif[2]||0,width:c.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var c=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||b('<div style="overflow:hidden;"></div>');var a=b.browser.msie&&7>b.browser.version,h=a?1:0,a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-h+"px",top:this.elementOffset.top-
h+"px",zIndex:++c.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,c){return{width:this.originalSize.width+c}},w:function(b,c){return{left:this.originalPosition.left+c,width:this.originalSize.width-c}},n:function(b,c,a){return{top:this.originalPosition.top+a,height:this.originalSize.height-a}},s:function(b,c,a){return{height:this.originalSize.height+a}},se:function(c,a,h){return b.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,
[c,a,h]))},sw:function(c,a,h){return b.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[c,a,h]))},ne:function(c,a,h){return b.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[c,a,h]))},nw:function(c,a,h){return b.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[c,a,h]))}},_propagate:function(c,a){b.ui.plugin.call(this,c,[a,this.ui()]);"resize"!=c&&this._trigger(c,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,
element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});b.extend(b.ui.resizable,{version:"1.8.14"});b.ui.plugin.add("resizable","alsoResize",{start:function(){var c=b(this).data("resizable").options,a=function(c){b(c).each(function(){var c=b(this);c.data("resizable-alsoresize",{width:parseInt(c.width(),10),height:parseInt(c.height(),10),left:parseInt(c.css("left"),10),top:parseInt(c.css("top"),10),position:c.css("position")})})};
"object"==typeof c.alsoResize&&!c.alsoResize.parentNode?c.alsoResize.length?(c.alsoResize=c.alsoResize[0],a(c.alsoResize)):b.each(c.alsoResize,function(b){a(b)}):a(c.alsoResize)},resize:function(c,a){var h=b(this).data("resizable"),e=h.options,f=h.originalSize,i=h.originalPosition,j={height:h.size.height-f.height||0,width:h.size.width-f.width||0,top:h.position.top-i.top||0,left:h.position.left-i.left||0},k=function(c,f){b(c).each(function(){var c=b(this),d=b(this).data("resizable-alsoresize"),i={},
e=f&&f.length?f:c.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];b.each(e,function(b,c){var a=(d[c]||0)+(j[c]||0);a&&0<=a&&(i[c]=a||null)});b.browser.opera&&/relative/.test(c.css("position"))&&(h._revertToRelativePosition=!0,c.css({position:"absolute",top:"auto",left:"auto"}));c.css(i)})};"object"==typeof e.alsoResize&&!e.alsoResize.nodeType?b.each(e.alsoResize,function(b,c){k(b,c)}):k(e.alsoResize)},stop:function(){var c=b(this).data("resizable"),a=c.options,
h=function(c){b(c).each(function(){var c=b(this);c.css({position:c.data("resizable-alsoresize").position})})};c._revertToRelativePosition&&(c._revertToRelativePosition=!1,"object"==typeof a.alsoResize&&!a.alsoResize.nodeType?b.each(a.alsoResize,function(b){h(b)}):h(a.alsoResize));b(this).removeData("resizable-alsoresize")}});b.ui.plugin.add("resizable","animate",{stop:function(c){var a=b(this).data("resizable"),h=a.options,e=a._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),
i=f&&b.ui.hasScroll(e[0],"left")?0:a.sizeDiff.height,f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-i},i=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null,j=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(b.extend(f,j&&i?{top:j,left:i}:{}),{duration:h.animateDuration,easing:h.animateEasing,step:function(){var f={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),
top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};e&&e.length&&b(e[0]).css({width:f.width,height:f.height});a._updateCache(f);a._propagate("resize",c)}})}});b.ui.plugin.add("resizable","containment",{start:function(){var c=b(this).data("resizable"),g=c.element,h=c.options.containment;if(g=h instanceof b?h.get(0):/parent/.test(h)?g.parent().get(0):h)if(c.containerElement=b(g),/document/.test(h)||h==document)c.containerOffset={left:0,top:0},c.containerPosition={left:0,top:0},
c.parentData={element:b(document),left:0,top:0,width:b(document).width(),height:b(document).height()||document.body.parentNode.scrollHeight};else{var e=b(g),f=[];b(["Top","Right","Left","Bottom"]).each(function(b,c){f[b]=a(e.css("padding"+c))});c.containerOffset=e.offset();c.containerPosition=e.position();c.containerSize={height:e.innerHeight()-f[3],width:e.innerWidth()-f[1]};var h=c.containerOffset,i=c.containerSize.height,j=c.containerSize.width,j=b.ui.hasScroll(g,"left")?g.scrollWidth:j,i=b.ui.hasScroll(g)?
g.scrollHeight:i;c.parentData={element:g,left:h.left,top:h.top,width:j,height:i}}},resize:function(c){var a=b(this).data("resizable"),h=a.options,e=a.containerOffset,f=a.position,c=a._aspectRatio||c.shiftKey,i={top:0,left:0},j=a.containerElement;j[0]!=document&&/static/.test(j.css("position"))&&(i=e);if(f.left<(a._helper?e.left:0))a.size.width+=a._helper?a.position.left-e.left:a.position.left-i.left,c&&(a.size.height=a.size.width/h.aspectRatio),a.position.left=h.helper?e.left:0;if(f.top<(a._helper?
e.top:0))a.size.height+=a._helper?a.position.top-e.top:a.position.top,c&&(a.size.width=a.size.height*h.aspectRatio),a.position.top=a._helper?e.top:0;a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;h=Math.abs(a.offset.left-i.left+a.sizeDiff.width);e=Math.abs((a._helper?a.offset.top-i.top:a.offset.top-e.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);i=/relative|absolute/.test(a.containerElement.css("position"));f&&i&&(h-=a.parentData.left);
h+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-h,c&&(a.size.height=a.size.width/a.aspectRatio));e+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-e,c&&(a.size.width=a.size.height*a.aspectRatio))},stop:function(){var a=b(this).data("resizable"),c=a.options,h=a.containerOffset,e=a.containerPosition,f=a.containerElement,i=b(a.helper),j=i.offset(),k=i.outerWidth()-a.sizeDiff.width,i=i.outerHeight()-a.sizeDiff.height;a._helper&&(!c.animate&&/relative/.test(f.css("position")))&&
b(this).css({left:j.left-e.left-h.left,width:k,height:i});a._helper&&(!c.animate&&/static/.test(f.css("position")))&&b(this).css({left:j.left-e.left-h.left,width:k,height:i})}});b.ui.plugin.add("resizable","ghost",{start:function(){var a=b(this).data("resizable"),c=a.options,h=a.size;a.ghost=a.originalElement.clone();a.ghost.css({opacity:0.25,display:"block",position:"relative",height:h.height,width:h.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof c.ghost?c.ghost:
"");a.ghost.appendTo(a.helper)},resize:function(){var a=b(this).data("resizable");a.ghost&&a.ghost.css({position:"relative",height:a.size.height,width:a.size.width})},stop:function(){var a=b(this).data("resizable");a.ghost&&a.helper&&a.helper.get(0).removeChild(a.ghost.get(0))}});b.ui.plugin.add("resizable","grid",{resize:function(){var a=b(this).data("resizable"),c=a.options,h=a.size,e=a.originalSize,f=a.originalPosition,i=a.axis;c.grid="number"==typeof c.grid?[c.grid,c.grid]:c.grid;var j=Math.round((h.width-
e.width)/(c.grid[0]||1))*(c.grid[0]||1),c=Math.round((h.height-e.height)/(c.grid[1]||1))*(c.grid[1]||1);/^(se|s|e)$/.test(i)?(a.size.width=e.width+j,a.size.height=e.height+c):/^(ne)$/.test(i)?(a.size.width=e.width+j,a.size.height=e.height+c,a.position.top=f.top-c):(/^(sw)$/.test(i)?(a.size.width=e.width+j,a.size.height=e.height+c):(a.size.width=e.width+j,a.size.height=e.height+c,a.position.top=f.top-c),a.position.left=f.left-j)}});var a=function(b){return parseInt(b,10)||0},c=function(b){return!isNaN(parseInt(b,
10))}})(jQuery);
(function(b){b.widget("ui.selectable",b.ui.mouse,{options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch"},_create:function(){var a=this;this.element.addClass("ui-selectable");this.dragged=!1;var c;this.refresh=function(){c=b(a.options.filter,a.element[0]);c.each(function(){var a=b(this),c=a.offset();b.data(this,"selectable-item",{element:this,$element:a,left:c.left,top:c.top,right:c.left+a.outerWidth(),bottom:c.top+a.outerHeight(),startselected:!1,selected:a.hasClass("ui-selected"),selecting:a.hasClass("ui-selecting"),
unselecting:a.hasClass("ui-unselecting")})})};this.refresh();this.selectees=c.addClass("ui-selectee");this._mouseInit();this.helper=b("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(a){var c=this;this.opos=[a.pageX,a.pageY];if(!this.options.disabled){var d=
this.options;this.selectees=b(d.filter,this.element[0]);this._trigger("start",a);b(d.appendTo).append(this.helper);this.helper.css({left:a.clientX,top:a.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var d=b.data(this,"selectable-item");d.startselected=!0;a.metaKey||(d.$element.removeClass("ui-selected"),d.selected=!1,d.$element.addClass("ui-unselecting"),d.unselecting=!0,c._trigger("unselecting",a,{unselecting:d.element}))});b(a.target).parents().andSelf().each(function(){var d=
b.data(this,"selectable-item");if(d){var h=!a.metaKey||!d.$element.hasClass("ui-selected");d.$element.removeClass(h?"ui-unselecting":"ui-selected").addClass(h?"ui-selecting":"ui-unselecting");d.unselecting=!h;d.selecting=h;(d.selected=h)?c._trigger("selecting",a,{selecting:d.element}):c._trigger("unselecting",a,{unselecting:d.element});return!1}})}},_mouseDrag:function(a){var c=this;this.dragged=!0;if(!this.options.disabled){var d=this.options,g=this.opos[0],h=this.opos[1],e=a.pageX,f=a.pageY;if(g>
e)var i=e,e=g,g=i;h>f&&(i=f,f=h,h=i);this.helper.css({left:g,top:h,width:e-g,height:f-h});this.selectees.each(function(){var i=b.data(this,"selectable-item");if(i&&i.element!=c.element[0]){var k=false;d.tolerance=="touch"?k=!(i.left>e||i.right<g||i.top>f||i.bottom<h):d.tolerance=="fit"&&(k=i.left>g&&i.right<e&&i.top>h&&i.bottom<f);if(k){if(i.selected){i.$element.removeClass("ui-selected");i.selected=false}if(i.unselecting){i.$element.removeClass("ui-unselecting");i.unselecting=false}if(!i.selecting){i.$element.addClass("ui-selecting");
i.selecting=true;c._trigger("selecting",a,{selecting:i.element})}}else{if(i.selecting)if(a.metaKey&&i.startselected){i.$element.removeClass("ui-selecting");i.selecting=false;i.$element.addClass("ui-selected");i.selected=true}else{i.$element.removeClass("ui-selecting");i.selecting=false;if(i.startselected){i.$element.addClass("ui-unselecting");i.unselecting=true}c._trigger("unselecting",a,{unselecting:i.element})}if(i.selected&&!a.metaKey&&!i.startselected){i.$element.removeClass("ui-selected");i.selected=
false;i.$element.addClass("ui-unselecting");i.unselecting=true;c._trigger("unselecting",a,{unselecting:i.element})}}}});return!1}},_mouseStop:function(a){var c=this;this.dragged=!1;b(".ui-unselecting",this.element[0]).each(function(){var d=b.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=!1;d.startselected=!1;c._trigger("unselected",a,{unselected:d.element})});b(".ui-selecting",this.element[0]).each(function(){var d=b.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");
d.selecting=!1;d.selected=!0;d.startselected=!0;c._trigger("selected",a,{selected:d.element})});this._trigger("stop",a);this.helper.remove();return!1}});b.extend(b.ui.selectable,{version:"1.8.14"})})(jQuery);
(function(b){b.widget("ui.sortable",b.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var b=this.options;this.containerCache={};this.element.addClass("ui-sortable");this.refresh();
this.floating=this.items.length?"x"===b.axis||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):!1;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var b=this.items.length-1;0<=b;b--)this.items[b].item.removeData("sortable-item");return this},_setOption:function(a,c){"disabled"===a?(this.options[a]=
c,this.widget()[c?"addClass":"removeClass"]("ui-sortable-disabled")):b.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,c){if(this.reverting||this.options.disabled||"static"==this.options.type)return!1;this._refreshItems(a);var d=null,g=this;b(a.target).parents().each(function(){if(b.data(this,"sortable-item")==g)return d=b(this),!1});b.data(a.target,"sortable-item")==g&&(d=b(a.target));if(!d)return!1;if(this.options.handle&&!c){var h=!1;b(this.options.handle,d).find("*").andSelf().each(function(){this==
a.target&&(h=!0)});if(!h)return!1}this.currentItem=d;this._removeCurrentsFromItems();return!0},_mouseStart:function(a,c,d){c=this.options;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=
this.helper.css("position");b.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();
c.containment&&this._setContainment();c.cursor&&(b("body").css("cursor")&&(this._storedCursor=b("body").css("cursor")),b("body").css("cursor",c.cursor));c.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",c.opacity));c.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",c.zIndex));this.scrollParent[0]!=document&&"HTML"!=this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset());
this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!d)for(d=this.containers.length-1;0<=d;d--)this.containers[d]._trigger("activate",a,this._uiHash(this));b.ui.ddmanager&&(b.ui.ddmanager.current=this);b.ui.ddmanager&&!c.dropBehaviour&&b.ui.ddmanager.prepareOffsets(this,a);this.dragging=!0;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);return!0},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");
this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs);if(this.options.scroll){var c=this.options,d=!1;this.scrollParent[0]!=document&&"HTML"!=this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity?this.scrollParent[0].scrollTop=d=this.scrollParent[0].scrollTop+c.scrollSpeed:a.pageY-this.overflowOffset.top<c.scrollSensitivity&&(this.scrollParent[0].scrollTop=d=this.scrollParent[0].scrollTop-c.scrollSpeed),this.overflowOffset.left+
this.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)?this.scrollParent[0].scrollLeft=d=this.scrollParent[0].scrollLeft+c.scrollSpeed:a.pageX-this.overflowOffset.left<c.scrollSensitivity&&(this.scrollParent[0].scrollLeft=d=this.scrollParent[0].scrollLeft-c.scrollSpeed):(a.pageY-b(document).scrollTop()<c.scrollSensitivity?d=b(document).scrollTop(b(document).scrollTop()-c.scrollSpeed):b(window).height()-(a.pageY-b(document).scrollTop())<c.scrollSensitivity&&(d=b(document).scrollTop(b(document).scrollTop()+
c.scrollSpeed)),a.pageX-b(document).scrollLeft()<c.scrollSensitivity?d=b(document).scrollLeft(b(document).scrollLeft()-c.scrollSpeed):b(window).width()-(a.pageX-b(document).scrollLeft())<c.scrollSensitivity&&(d=b(document).scrollLeft(b(document).scrollLeft()+c.scrollSpeed)));!1!==d&&(b.ui.ddmanager&&!c.dropBehaviour)&&b.ui.ddmanager.prepareOffsets(this,a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||"y"!=this.options.axis)this.helper[0].style.left=this.position.left+
"px";if(!this.options.axis||"x"!=this.options.axis)this.helper[0].style.top=this.position.top+"px";for(c=this.items.length-1;0<=c;c--){var d=this.items[c],g=d.item[0],h=this._intersectsWithPointer(d);if(h&&g!=this.currentItem[0]&&this.placeholder[1==h?"next":"prev"]()[0]!=g&&!b.ui.contains(this.placeholder[0],g)&&("semi-dynamic"==this.options.type?!b.ui.contains(this.element[0],g):1)){this.direction=1==h?"down":"up";if("pointer"==this.options.tolerance||this._intersectsWithSides(d))this._rearrange(a,
d);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);b.ui.ddmanager&&b.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return!1},_mouseStop:function(a,c){if(a){b.ui.ddmanager&&!this.options.dropBehaviour&&b.ui.ddmanager.drop(this,a);if(this.options.revert){var d=this,g=d.placeholder.offset();d.reverting=!0;b(this.helper).animate({left:g.left-this.offset.parent.left-d.margins.left+(this.offsetParent[0]==document.body?
0:this.offsetParent[0].scrollLeft),top:g.top-this.offset.parent.top-d.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){d._clear(a)})}else this._clear(a,c);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null});"original"==this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var a=this.containers.length-1;0<=a;a--)this.containers[a]._trigger("deactivate",
null,this._uiHash(this)),this.containers[a].containerCache.over&&(this.containers[a]._trigger("out",null,this._uiHash(this)),this.containers[a].containerCache.over=0)}this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!=this.options.helper&&(this.helper&&this.helper[0].parentNode)&&this.helper.remove(),b.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?b(this.domPosition.prev).after(this.currentItem):
b(this.domPosition.parent).prepend(this.currentItem));return this},serialize:function(a){var c=this._getItemsAsjQuery(a&&a.connected),d=[],a=a||{};b(c).each(function(){var c=(b(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);c&&d.push((a.key||c[1]+"[]")+"="+(a.key&&a.expression?c[1]:c[2]))});!d.length&&a.key&&d.push(a.key+"=");return d.join("&")},toArray:function(a){var c=this._getItemsAsjQuery(a&&a.connected),d=[],a=a||{};c.each(function(){d.push(b(a.item||this).attr(a.attribute||
"id")||"")});return d},_intersectsWith:function(b){var c=this.positionAbs.left,d=c+this.helperProportions.width,g=this.positionAbs.top,h=g+this.helperProportions.height,e=b.left,f=e+b.width,i=b.top,j=i+b.height,k=this.offset.click.top,l=this.offset.click.left;return"pointer"==this.options.tolerance||this.options.forcePointerForContainers||"pointer"!=this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>b[this.floating?"width":"height"]?g+k>i&&g+k<j&&c+l>e&&c+l<f:e<c+this.helperProportions.width/
2&&d-this.helperProportions.width/2<f&&i<g+this.helperProportions.height/2&&h-this.helperProportions.height/2<j},_intersectsWithPointer:function(a){var c=b.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height),a=b.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width),c=c&&a,a=this._getDragVerticalDirection(),d=this._getDragHorizontalDirection();return!c?!1:this.floating?d&&"right"==d||"down"==a?2:1:a&&("down"==a?2:1)},_intersectsWithSides:function(a){var c=
b.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height),a=b.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width),d=this._getDragVerticalDirection(),g=this._getDragHorizontalDirection();return this.floating&&g?"right"==g&&a||"left"==g&&!a:d&&("down"==d&&c||"up"==d&&!c)},_getDragVerticalDirection:function(){var b=this.positionAbs.top-this.lastPositionAbs.top;return 0!=b&&(0<b?"down":"up")},_getDragHorizontalDirection:function(){var b=this.positionAbs.left-
this.lastPositionAbs.left;return 0!=b&&(0<b?"right":"left")},refresh:function(b){this._refreshItems(b);this.refreshPositions();return this},_connectWith:function(){var b=this.options;return b.connectWith.constructor==String?[b.connectWith]:b.connectWith},_getItemsAsjQuery:function(a){var c=[],d=[],g=this._connectWith();if(g&&a)for(a=g.length-1;0<=a;a--)for(var h=b(g[a]),e=h.length-1;0<=e;e--){var f=b.data(h[e],"sortable");f&&(f!=this&&!f.options.disabled)&&d.push([b.isFunction(f.options.items)?f.options.items.call(f.element):
b(f.options.items,f.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),f])}d.push([b.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):b(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(a=d.length-1;0<=a;a--)d[a][0].each(function(){c.push(this)});return b(c)},_removeCurrentsFromItems:function(){for(var b=this.currentItem.find(":data(sortable-item)"),c=0;c<this.items.length;c++)for(var d=
0;d<b.length;d++)b[d]==this.items[c].item[0]&&this.items.splice(c,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var c=this.items,d=[[b.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):b(this.options.items,this.element),this]],g=this._connectWith();if(g)for(var h=g.length-1;0<=h;h--)for(var e=b(g[h]),f=e.length-1;0<=f;f--){var i=b.data(e[f],"sortable");i&&(i!=this&&!i.options.disabled)&&(d.push([b.isFunction(i.options.items)?i.options.items.call(i.element[0],
a,{item:this.currentItem}):b(i.options.items,i.element),i]),this.containers.push(i))}for(h=d.length-1;0<=h;h--){a=d[h][1];g=d[h][0];f=0;for(e=g.length;f<e;f++)i=b(g[f]),i.data("sortable-item",a),c.push({item:i,instance:a,width:0,height:0,left:0,top:0})}},refreshPositions:function(a){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());for(var c=this.items.length-1;0<=c;c--){var d=this.items[c];if(!(d.instance!=this.currentContainer&&this.currentContainer&&d.item[0]!=this.currentItem[0])){var g=
this.options.toleranceElement?b(this.options.toleranceElement,d.item):d.item;a||(d.width=g.outerWidth(),d.height=g.outerHeight());g=g.offset();d.left=g.left;d.top=g.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(c=this.containers.length-1;0<=c;c--)g=this.containers[c].element.offset(),this.containers[c].containerCache.left=g.left,this.containers[c].containerCache.top=g.top,this.containers[c].containerCache.width=this.containers[c].element.outerWidth(),
this.containers[c].containerCache.height=this.containers[c].element.outerHeight();return this},_createPlaceholder:function(a){var c=a||this,d=c.options;if(!d.placeholder||d.placeholder.constructor==String){var g=d.placeholder;d.placeholder={element:function(){var a=b(document.createElement(c.currentItem[0].nodeName)).addClass(g||c.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];g||(a.style.visibility="hidden");return a},update:function(b,a){if(!g||d.forcePlaceholderSize)a.height()||
a.height(c.currentItem.innerHeight()-parseInt(c.currentItem.css("paddingTop")||0,10)-parseInt(c.currentItem.css("paddingBottom")||0,10)),a.width()||a.width(c.currentItem.innerWidth()-parseInt(c.currentItem.css("paddingLeft")||0,10)-parseInt(c.currentItem.css("paddingRight")||0,10))}}}c.placeholder=b(d.placeholder.element.call(c.element,c.currentItem));c.currentItem.after(c.placeholder);d.placeholder.update(c,c.placeholder)},_contactContainers:function(a){for(var c=null,d=null,g=this.containers.length-
1;0<=g;g--)if(!b.ui.contains(this.currentItem[0],this.containers[g].element[0]))if(this._intersectsWith(this.containers[g].containerCache)){if(!c||!b.ui.contains(this.containers[g].element[0],c.element[0]))c=this.containers[g],d=g}else this.containers[g].containerCache.over&&(this.containers[g]._trigger("out",a,this._uiHash(this)),this.containers[g].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[d]._trigger("over",a,this._uiHash(this)),this.containers[d].containerCache.over=
1;else if(this.currentContainer!=this.containers[d]){for(var c=1E4,g=null,h=this.positionAbs[this.containers[d].floating?"left":"top"],e=this.items.length-1;0<=e;e--)if(b.ui.contains(this.containers[d].element[0],this.items[e].item[0])){var f=this.items[e][this.containers[d].floating?"left":"top"];Math.abs(f-h)<c&&(c=Math.abs(f-h),g=this.items[e])}if(g||this.options.dropOnEmpty)this.currentContainer=this.containers[d],g?this._rearrange(a,g,null,!0):this._rearrange(a,null,this.containers[d].element,
!0),this._trigger("change",a,this._uiHash()),this.containers[d]._trigger("change",a,this._uiHash(this)),this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[d]._trigger("over",a,this._uiHash(this)),this.containers[d].containerCache.over=1}},_createHelper:function(a){var c=this.options,a=b.isFunction(c.helper)?b(c.helper.apply(this.element[0],[a,this.currentItem])):"clone"==c.helper?this.currentItem.clone():this.currentItem;a.parents("body").length||b("parent"!=c.appendTo?
c.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);a[0]==this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")});(""==a[0].style.width||c.forceHelperSize)&&a.width(this.currentItem.width());(""==a[0].style.height||c.forceHelperSize)&&a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){"string"==
typeof a&&(a=a.split(" "));b.isArray(a)&&(a={left:+a[0],top:+a[1]||0});"left"in a&&(this.offset.click.left=a.left+this.margins.left);"right"in a&&(this.offset.click.left=this.helperProportions.width-a.right+this.margins.left);"top"in a&&(this.offset.click.top=a.top+this.margins.top);"bottom"in a&&(this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();"absolute"==this.cssPosition&&
(this.scrollParent[0]!=document&&b.ui.contains(this.scrollParent[0],this.offsetParent[0]))&&(a.left+=this.scrollParent.scrollLeft(),a.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&"html"==this.offsetParent[0].tagName.toLowerCase()&&b.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"==
this.cssPosition){var b=this.currentItem.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},
_setContainment:function(){var a=this.options;"parent"==a.containment&&(a.containment=this.helper[0].parentNode);if("document"==a.containment||"window"==a.containment)this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,b("document"==a.containment?document:window).width()-this.helperProportions.width-this.margins.left,(b("document"==a.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-
this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var c=b(a.containment)[0],a=b(a.containment).offset(),d="hidden"!=b(c).css("overflow");this.containment=[a.left+(parseInt(b(c).css("borderLeftWidth"),10)||0)+(parseInt(b(c).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(b(c).css("borderTopWidth"),10)||0)+(parseInt(b(c).css("paddingTop"),10)||0)-this.margins.top,a.left+(d?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(b(c).css("borderLeftWidth"),10)||
0)-(parseInt(b(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(d?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(b(c).css("borderTopWidth"),10)||0)-(parseInt(b(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,c){c||(c=this.position);var d="absolute"==a?1:-1,g="absolute"==this.cssPosition&&!(this.scrollParent[0]!=document&&b.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:
this.scrollParent,h=/(html|body)/i.test(g[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(b.browser.safari&&"fixed"==this.cssPosition?0:("fixed"==this.cssPosition?-this.scrollParent.scrollTop():h?0:g.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(b.browser.safari&&"fixed"==this.cssPosition?0:("fixed"==this.cssPosition?-this.scrollParent.scrollLeft():h?0:g.scrollLeft())*d)}},_generatePosition:function(a){var c=this.options,d="absolute"==
this.cssPosition&&!(this.scrollParent[0]!=document&&b.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=/(html|body)/i.test(d[0].tagName);"relative"==this.cssPosition&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])&&(this.offset.relative=this._getRelativeOffset());var h=a.pageX,e=a.pageY;if(this.originalPosition&&(this.containment&&(a.pageX-this.offset.click.left<this.containment[0]&&(h=this.containment[0]+this.offset.click.left),
a.pageY-this.offset.click.top<this.containment[1]&&(e=this.containment[1]+this.offset.click.top),a.pageX-this.offset.click.left>this.containment[2]&&(h=this.containment[2]+this.offset.click.left),a.pageY-this.offset.click.top>this.containment[3]&&(e=this.containment[3]+this.offset.click.top)),c.grid))e=this.originalPageY+Math.round((e-this.originalPageY)/c.grid[1])*c.grid[1],e=this.containment?!(e-this.offset.click.top<this.containment[1]||e-this.offset.click.top>this.containment[3])?e:!(e-this.offset.click.top<
this.containment[1])?e-c.grid[1]:e+c.grid[1]:e,h=this.originalPageX+Math.round((h-this.originalPageX)/c.grid[0])*c.grid[0],h=this.containment?!(h-this.offset.click.left<this.containment[0]||h-this.offset.click.left>this.containment[2])?h:!(h-this.offset.click.left<this.containment[0])?h-c.grid[0]:h+c.grid[0]:h;return{top:e-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(b.browser.safari&&"fixed"==this.cssPosition?0:"fixed"==this.cssPosition?-this.scrollParent.scrollTop():g?
0:d.scrollTop()),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(b.browser.safari&&"fixed"==this.cssPosition?0:"fixed"==this.cssPosition?-this.scrollParent.scrollLeft():g?0:d.scrollLeft())}},_rearrange:function(b,c,d,g){d?d[0].appendChild(this.placeholder[0]):c.item[0].parentNode.insertBefore(this.placeholder[0],"down"==this.direction?c.item[0]:c.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var h=this,e=this.counter;window.setTimeout(function(){e==
h.counter&&h.refreshPositions(!g)},0)},_clear:function(a,c){this.reverting=!1;var d=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var g in this._storedCSS)if("auto"==this._storedCSS[g]||"static"==this._storedCSS[g])this._storedCSS[g]="";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!c&&d.push(function(b){this._trigger("receive",
b,this._uiHash(this.fromOutside))});(this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!c&&d.push(function(b){this._trigger("update",b,this._uiHash())});if(!b.ui.contains(this.element[0],this.currentItem[0])){c||d.push(function(b){this._trigger("remove",b,this._uiHash())});for(g=this.containers.length-1;0<=g;g--)b.ui.contains(this.containers[g].element[0],this.currentItem[0])&&!c&&(d.push(function(b){return function(a){b._trigger("receive",
a,this._uiHash(this))}}.call(this,this.containers[g])),d.push(function(b){return function(a){b._trigger("update",a,this._uiHash(this))}}.call(this,this.containers[g])))}for(g=this.containers.length-1;0<=g;g--)c||d.push(function(b){return function(a){b._trigger("deactivate",a,this._uiHash(this))}}.call(this,this.containers[g])),this.containers[g].containerCache.over&&(d.push(function(b){return function(a){b._trigger("out",a,this._uiHash(this))}}.call(this,this.containers[g])),this.containers[g].containerCache.over=
0);this._storedCursor&&b("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);this._storedZIndex&&this.helper.css("zIndex","auto"==this._storedZIndex?"":this._storedZIndex);this.dragging=!1;if(this.cancelHelperRemoval){if(!c){this._trigger("beforeStop",a,this._uiHash());for(g=0;g<d.length;g++)d[g].call(this,a);this._trigger("stop",a,this._uiHash())}return!1}c||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!c){for(g=0;g<d.length;g++)d[g].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=!1;return!0},_trigger:function(){!1===b.Widget.prototype._trigger.apply(this,arguments)&&this.cancel()},_uiHash:function(a){var c=a||this;return{helper:c.helper,placeholder:c.placeholder||b([]),position:c.position,originalPosition:c.originalPosition,offset:c.positionAbs,item:c.currentItem,sender:a?a.element:null}}});b.extend(b.ui.sortable,
{version:"1.8.14"})})(jQuery);
(function(b){b.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:!0,clearStyle:!1,collapsible:!1,event:"click",fillSpace:!1,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:!1,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,c=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");a.headers=
a.element.find(c.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){c.disabled||b(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){c.disabled||b(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){c.disabled||b(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){c.disabled||b(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
if(c.navigation){var d=a.element.find("a").filter(c.navigationFilter).eq(0);if(d.length){var g=d.closest(".ui-accordion-header");a.active=g.length?g:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||c.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion",
function(b){return a._keydown(b)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);b.browser.safari||a.headers.find("a").attr("tabIndex",-1);c.event&&a.headers.bind(c.event.split(" ").join(".accordion ")+".accordion",function(b){a._clickHandler.call(a,b,this);b.preventDefault()})},_createIcons:function(){var a=
this.options;a.icons&&(b("<span></span>").addClass("ui-icon "+a.icons.header).prependTo(this.headers),this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected),this.element.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex");
this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var c=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");(a.autoHeight||a.fillHeight)&&c.css("height","");return b.Widget.prototype.destroy.call(this)},_setOption:function(a,c){b.Widget.prototype._setOption.apply(this,arguments);"active"==a&&this.activate(c);"icons"==a&&(this._destroyIcons(),
c&&this._createIcons());if("disabled"==a)this.headers.add(this.headers.next())[c?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!this.options.disabled&&!a.altKey&&!a.ctrlKey){var c=b.ui.keyCode,d=this.headers.length,g=this.headers.index(a.target),h=!1;switch(a.keyCode){case c.RIGHT:case c.DOWN:h=this.headers[(g+1)%d];break;case c.LEFT:case c.UP:h=this.headers[(g-1+d)%d];break;case c.SPACE:case c.ENTER:this._clickHandler({target:a.target},a.target),a.preventDefault()}return h?
(b(a.target).attr("tabIndex",-1),b(h).attr("tabIndex",0),h.focus(),!1):!0}},resize:function(){var a=this.options,c;if(a.fillSpace){if(b.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height();b.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){c-=b(this).outerHeight(!0)});this.headers.next().each(function(){b(this).height(Math.max(0,c-b(this).innerHeight()+b(this).height()))}).css("overflow",
"auto")}else a.autoHeight&&(c=0,this.headers.next().each(function(){c=Math.max(c,b(this).height("").height())}).height(c));return this},activate:function(b){this.options.active=b;b=this._findActive(b)[0];this._clickHandler({target:b},b);return this},_findActive:function(a){return a?"number"===typeof a?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):!1===a?b([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,c){var d=this.options;if(!d.disabled)if(a.target){var g=b(a.currentTarget||
c),h=g[0]===this.active[0];d.active=d.collapsible&&h?!1:this.headers.index(g);if(!(this.running||!d.collapsible&&h)){var e=this.active,f=g.next(),i=this.active.next(),j={options:d,newHeader:h&&d.collapsible?b([]):g,oldHeader:this.active,newContent:h&&d.collapsible?b([]):f,oldContent:i},k=this.headers.index(this.active[0])>this.headers.index(g[0]);this.active=h?b([]):g;this._toggle(f,i,j,h,k);e.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);
h||(g.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected),g.next().addClass("ui-accordion-content-active"))}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var i=this.active.next(),
j={options:d,newHeader:b([]),oldHeader:d.active,newContent:b([]),oldContent:i},f=this.active=b([]);this._toggle(f,i,j)}},_toggle:function(a,c,d,g,h){var e=this,f=e.options;e.toShow=a;e.toHide=c;e.data=d;var i=function(){if(e)return e._completed.apply(e,arguments)};e._trigger("changestart",null,e.data);e.running=0===c.size()?a.size():c.size();if(f.animated){d={};d=f.collapsible&&g?{toShow:b([]),toHide:c,complete:i,down:h,autoHeight:f.autoHeight||f.fillSpace}:{toShow:a,toHide:c,complete:i,down:h,autoHeight:f.autoHeight||
f.fillSpace};f.proxied||(f.proxied=f.animated);f.proxiedDuration||(f.proxiedDuration=f.duration);f.animated=b.isFunction(f.proxied)?f.proxied(d):f.proxied;f.duration=b.isFunction(f.proxiedDuration)?f.proxiedDuration(d):f.proxiedDuration;var g=b.ui.accordion.animations,j=f.duration,k=f.animated;k&&(!g[k]&&!b.easing[k])&&(k="slide");g[k]||(g[k]=function(b){this.slide(b,{easing:k,duration:j||700})});g[k](d)}else f.collapsible&&g?a.toggle():(c.hide(),a.show()),i(!0);c.prev().attr({"aria-expanded":"false",
"aria-selected":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(b){this.running=b?0:--this.running;this.running||(this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""}),this.toHide.removeClass("ui-accordion-content-active"),this.toHide.length&&(this.toHide.parent()[0].className=this.toHide.parent()[0].className),this._trigger("change",null,this.data))}});b.extend(b.ui.accordion,{version:"1.8.14",
animations:{slide:function(a,c){a=b.extend({easing:"swing",duration:300},a,c);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),g=0,h={},e={},f,i=a.toShow;f=i[0].style.width;i.width(parseInt(i.parent().width(),10)-parseInt(i.css("paddingLeft"),10)-parseInt(i.css("paddingRight"),10)-(parseInt(i.css("borderLeftWidth"),10)||0)-(parseInt(i.css("borderRightWidth"),10)||0));b.each(["height","paddingTop","paddingBottom"],function(c,f){e[f]="hide";var i=(""+b.css(a.toShow[0],f)).match(/^([\d+-.]+)(.*)$/);
h[f]={value:i[1],unit:i[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(e,{step:function(b,c){"height"==c.prop&&(g=0===c.end-c.start?0:(c.now-c.start)/(c.end-c.start));a.toShow[0].style[c.prop]=g*h[c.prop].value+h[c.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:f,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide",
paddingTop:"hide",paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(b){this.slide(b,{easing:b.down?"easeOutBounce":"swing",duration:b.down?1E3:200})}}})})(jQuery);
(function(b){var a=0;b.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var c=this,a=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(a){if(!c.options.disabled&&!c.element.attr("readonly")){g=!1;var d=
b.ui.keyCode;switch(a.keyCode){case d.PAGE_UP:c._move("previousPage",a);break;case d.PAGE_DOWN:c._move("nextPage",a);break;case d.UP:c._move("previous",a);a.preventDefault();break;case d.DOWN:c._move("next",a);a.preventDefault();break;case d.ENTER:case d.NUMPAD_ENTER:c.menu.active&&(g=!0,a.preventDefault());case d.TAB:if(!c.menu.active)break;c.menu.select(a);break;case d.ESCAPE:c.element.val(c.term);c.close(a);break;default:clearTimeout(c.searching),c.searching=setTimeout(function(){c.term!=c.element.val()&&
(c.selectedItem=null,c.search(null,a))},c.options.delay)}}}).bind("keypress.autocomplete",function(b){g&&(g=!1,b.preventDefault())}).bind("focus.autocomplete",function(){c.options.disabled||(c.selectedItem=null,c.previous=c.element.val())}).bind("blur.autocomplete",function(b){c.options.disabled||(clearTimeout(c.searching),c.closing=setTimeout(function(){c.close(b);c._change(b)},150))});this._initSource();this.response=function(){return c._response.apply(c,arguments)};this.menu=b("<ul></ul>").addClass("ui-autocomplete").appendTo(b(this.options.appendTo||
"body",a)[0]).mousedown(function(a){var d=c.menu.element[0];b(a.target).closest(".ui-menu-item").length||setTimeout(function(){b(document).one("mousedown",function(a){a.target!==c.element[0]&&(a.target!==d&&!b.ui.contains(d,a.target))&&c.close()})},1);setTimeout(function(){clearTimeout(c.closing)},13)}).menu({focus:function(b,a){var f=a.item.data("item.autocomplete");!1!==c._trigger("focus",b,{item:f})&&/^key/.test(b.originalEvent.type)&&c.element.val(f.value)},selected:function(b,e){var f=e.item.data("item.autocomplete"),
i=c.previous;c.element[0]!==a.activeElement&&(c.element.focus(),c.previous=i,setTimeout(function(){c.previous=i;c.selectedItem=f},1));!1!==c._trigger("select",b,{item:f})&&c.element.val(f.value);c.term=c.element.val();c.close(b);c.selectedItem=f},blur:function(){c.menu.element.is(":visible")&&c.element.val()!==c.term&&c.element.val(c.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");b.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");
this.menu.element.remove();b.Widget.prototype.destroy.call(this)},_setOption:function(a,d){b.Widget.prototype._setOption.apply(this,arguments);"source"===a&&this._initSource();"appendTo"===a&&this.menu.element.appendTo(b(d||"body",this.element[0].ownerDocument)[0]);"disabled"===a&&(d&&this.xhr)&&this.xhr.abort()},_initSource:function(){var c=this,d,g;b.isArray(this.options.source)?(d=this.options.source,this.source=function(a,c){c(b.ui.autocomplete.filter(d,a.term))}):"string"===typeof this.options.source?
(g=this.options.source,this.source=function(d,e){c.xhr&&c.xhr.abort();c.xhr=b.ajax({url:g,data:d,dataType:"json",autocompleteRequest:++a,success:function(b){this.autocompleteRequest===a&&e(b)},error:function(){this.autocompleteRequest===a&&e([])}})}):this.source=this.options.source},search:function(b,a){b=null!=b?b:this.element.val();this.term=this.element.val();if(b.length<this.options.minLength)return this.close(a);clearTimeout(this.closing);if(!1!==this._trigger("search",a))return this._search(b)},
_search:function(b){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:b},this.response)},_response:function(b){!this.options.disabled&&b&&b.length?(b=this._normalize(b),this._suggest(b),this._trigger("open")):this.close();this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(b){clearTimeout(this.closing);this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.deactivate(),this._trigger("close",b))},_change:function(b){this.previous!==
this.element.val()&&this._trigger("change",b,{item:this.selectedItem})},_normalize:function(a){return a.length&&a[0].label&&a[0].value?a:b.map(a,function(a){return"string"===typeof a?{label:a,value:a}:b.extend({label:a.label||a.value,value:a.value||a.label},a)})},_suggest:function(a){var d=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(d,a);this.menu.deactivate();this.menu.refresh();d.show();this._resizeMenu();d.position(b.extend({of:this.element},this.options.position));
this.options.autoFocus&&this.menu.next(new b.Event("mouseover"))},_resizeMenu:function(){var b=this.menu.element;b.outerWidth(Math.max(b.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,d){var g=this;b.each(d,function(b,d){g._renderItem(a,d)})},_renderItem:function(a,d){return b("<li></li>").data("item.autocomplete",d).append(b("<a></a>").text(d.label)).appendTo(a)},_move:function(b,a){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(b)||this.menu.last()&&
/^next/.test(b))this.element.val(this.term),this.menu.deactivate();else this.menu[b](a);else this.search(null,a)},widget:function(){return this.menu.element}});b.extend(b.ui.autocomplete,{escapeRegex:function(b){return b.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(a,d){var g=RegExp(b.ui.autocomplete.escapeRegex(d),"i");return b.grep(a,function(b){return g.test(b.label||b.value||b)})}})})(jQuery);
(function(b){b.widget("ui.menu",{_create:function(){var a=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){b(c.target).closest(".ui-menu-item a").length&&(c.preventDefault(),a.select(c))});this.refresh()},refresh:function(){var a=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
-1).mouseenter(function(c){a.activate(c,b(this).parent())}).mouseleave(function(){a.deactivate()})},activate:function(b,c){this.deactivate();if(this.hasScroll()){var d=c.offset().top-this.element.offset().top,g=this.element.scrollTop(),h=this.element.height();0>d?this.element.scrollTop(g+d):d>=h&&this.element.scrollTop(g+d-h+c.height())}this.active=c.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",b,{item:c})},deactivate:function(){this.active&&
(this.active.children("a").removeClass("ui-state-hover").removeAttr("id"),this._trigger("blur"),this.active=null)},next:function(b){this.move("next",".ui-menu-item:first",b)},previous:function(b){this.move("prev",".ui-menu-item:last",b)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(b,c,d){this.active?(b=this.active[b+"All"](".ui-menu-item").eq(0),b.length?this.activate(d,
b):this.activate(d,this.element.children(c))):this.activate(d,this.element.children(c))},nextPage:function(a){if(this.hasScroll())if(!this.active||this.last())this.activate(a,this.element.children(".ui-menu-item:first"));else{var c=this.active.offset().top,d=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var a=b(this).offset().top-c-d+b(this).height();return 10>a&&-10<a});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(a,g)}else this.activate(a,
this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(a){if(this.hasScroll())if(!this.active||this.first())this.activate(a,this.element.children(".ui-menu-item:last"));else{var c=this.active.offset().top,d=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var a=b(this).offset().top-c+d-b(this).height();return 10>a&&-10<a});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(a,
result)}else this.activate(a,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[b.fn.prop?"prop":"attr"]("scrollHeight")},select:function(b){this._trigger("selected",b,{item:this.active})}})})(jQuery);
(function(b){var a,c,d,g,h=function(){var a=b(this).find(":ui-button");setTimeout(function(){a.button("refresh")},1)},e=function(a){var c=a.name,d=a.form,h=b([]);c&&(h=d?b(d).find("[name='"+c+"']"):b("[name='"+c+"']",a.ownerDocument).filter(function(){return!this.form}));return h};b.widget("ui.button",{options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",h);"boolean"!==typeof this.options.disabled&&
(this.options.disabled=this.element.attr("disabled"));this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var f=this,i=this.options,j="checkbox"===this.type||"radio"===this.type,k="ui-state-hover"+(!j?" ui-state-active":"");null===i.label&&(i.label=this.buttonElement.html());this.element.is(":disabled")&&(i.disabled=!0);this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",function(){if(!i.disabled){b(this).addClass("ui-state-hover");
this===a&&b(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){i.disabled||b(this).removeClass(k)}).bind("click.button",function(b){if(i.disabled){b.preventDefault();b.stopImmediatePropagation()}});this.element.bind("focus.button",function(){f.buttonElement.addClass("ui-state-focus")}).bind("blur.button",function(){f.buttonElement.removeClass("ui-state-focus")});j&&(this.element.bind("change.button",function(){g||f.refresh()}),this.buttonElement.bind("mousedown.button",function(b){if(!i.disabled){g=
false;c=b.pageX;d=b.pageY}}).bind("mouseup.button",function(b){if(!i.disabled&&(c!==b.pageX||d!==b.pageY))g=true}));"checkbox"===this.type?this.buttonElement.bind("click.button",function(){if(i.disabled||g)return false;b(this).toggleClass("ui-state-active");f.buttonElement.attr("aria-pressed",f.element[0].checked)}):"radio"===this.type?this.buttonElement.bind("click.button",function(){if(i.disabled||g)return false;b(this).addClass("ui-state-active");f.buttonElement.attr("aria-pressed",true);var a=
f.element[0];e(a).not(a).map(function(){return b(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed",false)}):(this.buttonElement.bind("mousedown.button",function(){if(i.disabled)return false;b(this).addClass("ui-state-active");a=this;b(document).one("mouseup",function(){a=null})}).bind("mouseup.button",function(){if(i.disabled)return false;b(this).removeClass("ui-state-active")}).bind("keydown.button",function(a){if(i.disabled)return false;(a.keyCode==b.ui.keyCode.SPACE||
a.keyCode==b.ui.keyCode.ENTER)&&b(this).addClass("ui-state-active")}).bind("keyup.button",function(){b(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(a){a.keyCode===b.ui.keyCode.SPACE&&b(this).click()}));this._setOption("disabled",i.disabled);this._resetButton()},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if("checkbox"===this.type||
"radio"===this.type){var b=this.element.parents().filter(":last"),a="label[for="+this.element.attr("id")+"]";this.buttonElement=b.find(a);this.buttonElement.length||(b=b.length?b.siblings():this.element.siblings(),this.buttonElement=b.filter(a),this.buttonElement.length||(this.buttonElement=b.find(a)));this.element.addClass("ui-helper-hidden-accessible");(b=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=
this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||
this.buttonElement.removeAttr("title");b.Widget.prototype.destroy.call(this)},_setOption:function(a,c){b.Widget.prototype._setOption.apply(this,arguments);"disabled"===a?c?this.element.attr("disabled",!0):this.element.removeAttr("disabled"):this._resetButton()},refresh:function(){var a=this.element.is(":disabled");a!==this.options.disabled&&this._setOption("disabled",a);"radio"===this.type?e(this.element[0]).each(function(){b(this).is(":checked")?b(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
!0):b(this).button("widget").removeClass("ui-state-active").attr("aria-pressed",!1)}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed",!0):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed",!1))},_resetButton:function(){if("input"===this.type)this.options.label&&this.element.val(this.options.label);else{var a=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
c=b("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(a.empty()).text(),d=this.options.icons,h=d.primary&&d.secondary,e=[];d.primary||d.secondary?(this.options.text&&e.push("ui-button-text-icon"+(h?"s":d.primary?"-primary":"-secondary")),d.primary&&a.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>"),d.secondary&&a.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>"),this.options.text||(e.push(h?"ui-button-icons-only":
"ui-button-icon-only"),this.hasTitle||a.attr("title",c))):e.push("ui-button-text-only");a.addClass(e.join(" "))}}});b.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(a,c){"disabled"===a&&this.buttons.button("option",a,c);b.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var a="ltr"===this.element.css("direction");
this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(a?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(a?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");
b.Widget.prototype.destroy.call(this)}})})(jQuery);
(function(b,a){var c={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},d={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},g=b.attrFn||{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0,click:!0};b.widget("ui.dialog",{options:{autoOpen:!0,buttons:{},closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:!1,maxWidth:!1,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",collision:"fit",using:function(a){var c=
b(this).css(a).offset().top;0>c&&b(this).css("top",a.top-c)}},resizable:!0,show:null,stack:!0,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");"string"!==typeof this.originalTitle&&(this.originalTitle="");this.options.title=this.options.title||this.originalTitle;var a=this,c=a.options,f=c.title||"&#160;",i=b.ui.dialog.getTitleId(a.element),d=(a.uiDialog=b("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+
c.dialogClass).css({zIndex:c.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(f){if(c.closeOnEscape&&f.keyCode&&f.keyCode===b.ui.keyCode.ESCAPE){a.close(f);f.preventDefault()}}).attr({role:"dialog","aria-labelledby":i}).mousedown(function(b){a.moveToTop(false,b)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(d);var g=(a.uiDialogTitlebar=b("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(d),
l=b('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){l.addClass("ui-state-hover")},function(){l.removeClass("ui-state-hover")}).focus(function(){l.addClass("ui-state-focus")}).blur(function(){l.removeClass("ui-state-focus")}).click(function(b){a.close(b);return false}).appendTo(g);(a.uiDialogTitlebarCloseText=b("<span></span>")).addClass("ui-icon ui-icon-closethick").text(c.closeText).appendTo(l);b("<span></span>").addClass("ui-dialog-title").attr("id",
i).html(f).prependTo(g);b.isFunction(c.beforeclose)&&!b.isFunction(c.beforeClose)&&(c.beforeClose=c.beforeclose);g.find("*").add(g).disableSelection();c.draggable&&b.fn.draggable&&a._makeDraggable();c.resizable&&b.fn.resizable&&a._makeResizable();a._createButtons(c.buttons);a._isOpen=!1;b.fn.bgiframe&&d.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){this.overlay&&this.overlay.destroy();this.uiDialog.hide();this.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");
this.uiDialog.remove();this.originalTitle&&this.element.attr("title",this.originalTitle);return this},widget:function(){return this.uiDialog},close:function(a){var c=this,f,d;if(!1!==c._trigger("beforeClose",a))return c.overlay&&c.overlay.destroy(),c.uiDialog.unbind("keypress.ui-dialog"),c._isOpen=!1,c.options.hide?c.uiDialog.hide(c.options.hide,function(){c._trigger("close",a)}):(c.uiDialog.hide(),c._trigger("close",a)),b.ui.dialog.overlay.resize(),c.options.modal&&(f=0,b(".ui-dialog").each(function(){if(this!==
c.uiDialog[0]){d=b(this).css("z-index");isNaN(d)||(f=Math.max(f,d))}}),b.ui.dialog.maxZ=f),c},isOpen:function(){return this._isOpen},moveToTop:function(a,c){var f=this.options;if(f.modal&&!a||!f.stack&&!f.modal)return this._trigger("focus",c);f.zIndex>b.ui.dialog.maxZ&&(b.ui.dialog.maxZ=f.zIndex);this.overlay&&(b.ui.dialog.maxZ+=1,this.overlay.$el.css("z-index",b.ui.dialog.overlay.maxZ=b.ui.dialog.maxZ));f={scrollTop:this.element.attr("scrollTop"),scrollLeft:this.element.attr("scrollLeft")};b.ui.dialog.maxZ+=
1;this.uiDialog.css("z-index",b.ui.dialog.maxZ);this.element.attr(f);this._trigger("focus",c);return this},open:function(){if(!this._isOpen){var a=this.options,c=this.uiDialog;this.overlay=a.modal?new b.ui.dialog.overlay(this):null;this._size();this._position(a.position);c.show(a.show);this.moveToTop(!0);a.modal&&c.bind("keypress.ui-dialog",function(a){if(a.keyCode===b.ui.keyCode.TAB){var c=b(":tabbable",this),d=c.filter(":first"),c=c.filter(":last");if(a.target===c[0]&&!a.shiftKey)return d.focus(1),
!1;if(a.target===d[0]&&a.shiftKey)return c.focus(1),!1}});b(this.element.find(":tabbable").get().concat(c.find(".ui-dialog-buttonpane :tabbable").get().concat(c.get()))).eq(0).focus();this._isOpen=!0;this._trigger("open");return this}},_createButtons:function(a){var c=this,f=!1,d=b("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),j=b("<div></div>").addClass("ui-dialog-buttonset").appendTo(d);c.uiDialog.find(".ui-dialog-buttonpane").remove();"object"===typeof a&&
null!==a&&b.each(a,function(){return!(f=!0)});f&&(b.each(a,function(a,f){var f=b.isFunction(f)?{click:f,text:a}:f,d=b('<button type="button"></button>').click(function(){f.click.apply(c.element[0],arguments)}).appendTo(j);b.each(f,function(b,a){if("click"!==b)if(b in g)d[b](a);else d.attr(b,a)});b.fn.button&&d.button()}),d.appendTo(c.uiDialog))},_makeDraggable:function(){function a(b){return{position:b.position,offset:b.offset}}var c=this,f=c.options,d=b(document),g;c.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",
handle:".ui-dialog-titlebar",containment:"document",start:function(d,i){g="auto"===f.height?"auto":b(this).height();b(this).height(b(this).height()).addClass("ui-dialog-dragging");c._trigger("dragStart",d,a(i))},drag:function(b,f){c._trigger("drag",b,a(f))},stop:function(k,l){f.position=[l.position.left-d.scrollLeft(),l.position.top-d.scrollTop()];b(this).removeClass("ui-dialog-dragging").height(g);c._trigger("dragStop",k,a(l));b.ui.dialog.overlay.resize()}})},_makeResizable:function(c){function d(b){return{originalPosition:b.originalPosition,
originalSize:b.originalSize,position:b.position,size:b.size}}var c=c===a?this.options.resizable:c,f=this,i=f.options,g=f.uiDialog.css("position"),c="string"===typeof c?c:"n,e,s,w,se,sw,ne,nw";f.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:f.element,maxWidth:i.maxWidth,maxHeight:i.maxHeight,minWidth:i.minWidth,minHeight:f._minHeight(),handles:c,start:function(a,c){b(this).addClass("ui-dialog-resizing");f._trigger("resizeStart",a,d(c))},resize:function(b,a){f._trigger("resize",
b,d(a))},stop:function(a,c){b(this).removeClass("ui-dialog-resizing");i.height=b(this).height();i.width=b(this).width();f._trigger("resizeStop",a,d(c));b.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var b=this.options;return"auto"===b.height?b.minHeight:Math.min(b.minHeight,b.height)},_position:function(a){var c=[],f=[0,0],d;if(a){if("string"===typeof a||"object"===typeof a&&"0"in a)c=a.split?a.split(" "):
[a[0],a[1]],1===c.length&&(c[1]=c[0]),b.each(["left","top"],function(b,a){+c[b]===c[b]&&(f[b]=c[b],c[b]=a)}),a={my:c.join(" "),at:c.join(" "),offset:f.join(" ")};a=b.extend({},b.ui.dialog.prototype.options.position,a)}else a=b.ui.dialog.prototype.options.position;(d=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(b.extend({of:window},a));d||this.uiDialog.hide()},_setOptions:function(a){var g=this,f={},i=!1;b.each(a,function(b,a){g._setOption(b,a);b in
c&&(i=!0);b in d&&(f[b]=a)});i&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",f)},_setOption:function(a,c){var f=this.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":this._createButtons(c);break;case "closeText":this.uiDialogTitlebarCloseText.text(""+c);break;case "dialogClass":f.removeClass(this.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+c);break;case "disabled":c?f.addClass("ui-dialog-disabled"):
f.removeClass("ui-dialog-disabled");break;case "draggable":var d=f.is(":data(draggable)");d&&!c&&f.draggable("destroy");!d&&c&&this._makeDraggable();break;case "position":this._position(c);break;case "resizable":(d=f.is(":data(resizable)"))&&!c&&f.resizable("destroy");d&&"string"===typeof c&&f.resizable("option","handles",c);!d&&!1!==c&&this._makeResizable(c);break;case "title":b(".ui-dialog-title",this.uiDialogTitlebar).html(""+(c||"&#160;"))}b.Widget.prototype._setOption.apply(this,arguments)},
_size:function(){var a=this.options,c,f,d=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});a.minWidth>a.width&&(a.width=a.minWidth);c=this.uiDialog.css({height:"auto",width:a.width}).height();f=Math.max(0,a.minHeight-c);"auto"===a.height?b.support.minHeight?this.element.css({minHeight:f,height:"auto"}):(this.uiDialog.show(),a=this.element.css("height","auto").height(),d||this.uiDialog.hide(),this.element.height(Math.max(a,f))):this.element.height(Math.max(a.height-
c,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});b.extend(b.ui.dialog,{version:"1.8.14",uuid:0,maxZ:0,getTitleId:function(b){b=b.attr("id");b||(b=this.uuid+=1);return"ui-dialog-title-"+b},overlay:function(a){this.$el=b.ui.dialog.overlay.create(a)}});b.extend(b.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:b.map("focus mousedown mouseup keydown keypress click".split(" "),function(b){return b+".dialog-overlay"}).join(" "),
create:function(a){0===this.instances.length&&(setTimeout(function(){b.ui.dialog.overlay.instances.length&&b(document).bind(b.ui.dialog.overlay.events,function(a){if(b(a.target).zIndex()<b.ui.dialog.overlay.maxZ)return!1})},1),b(document).bind("keydown.dialog-overlay",function(c){a.options.closeOnEscape&&(c.keyCode&&c.keyCode===b.ui.keyCode.ESCAPE)&&(a.close(c),c.preventDefault())}),b(window).bind("resize.dialog-overlay",b.ui.dialog.overlay.resize));var c=(this.oldInstances.pop()||b("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
height:this.height()});b.fn.bgiframe&&c.bgiframe();this.instances.push(c);return c},destroy:function(a){var c=b.inArray(a,this.instances);-1!=c&&this.oldInstances.push(this.instances.splice(c,1)[0]);0===this.instances.length&&b([document,window]).unbind(".dialog-overlay");a.remove();var f=0;b.each(this.instances,function(){f=Math.max(f,this.css("z-index"))});this.maxZ=f},height:function(){var a,c;return b.browser.msie&&7>b.browser.version?(a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),
c=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight),a<c?b(window).height()+"px":a+"px"):b(document).height()+"px"},width:function(){var a,c;return b.browser.msie?(a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth),c=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth),a<c?b(window).width()+"px":a+"px"):b(document).width()+"px"},resize:function(){var a=b([]);b.each(b.ui.dialog.overlay.instances,function(){a=a.add(this)});a.css({width:0,
height:0}).css({width:b.ui.dialog.overlay.width(),height:b.ui.dialog.overlay.height()})}});b.extend(b.ui.dialog.overlay.prototype,{destroy:function(){b.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
(function(b){b.widget("ui.slider",b.ui.mouse,{widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var a=this,c=this.options,d=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),g=c.values&&c.values.length||1,h=[];this._mouseSliding=this._keySliding=!1;this._animateOff=!0;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
this.orientation+" ui-widget ui-widget-content ui-corner-all"+(c.disabled?" ui-slider-disabled ui-disabled":""));this.range=b([]);if(c.range){if(!0===c.range&&(c.values||(c.values=[this._valueMin(),this._valueMin()]),c.values.length&&2!==c.values.length))c.values=[c.values[0],c.values[0]];this.range=b("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+("min"===c.range||"max"===c.range?" ui-slider-range-"+c.range:""))}for(var e=d.length;e<g;e+=1)h.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
this.handles=d.add(b(h.join("")).appendTo(a.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(b){b.preventDefault()}).hover(function(){c.disabled||b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")}).focus(function(){c.disabled?b(this).blur():(b(".ui-slider .ui-state-focus").removeClass("ui-state-focus"),b(this).addClass("ui-state-focus"))}).blur(function(){b(this).removeClass("ui-state-focus")});this.handles.each(function(a){b(this).data("index.ui-slider-handle",
a)});this.handles.keydown(function(c){var d=!0,g=b(this).data("index.ui-slider-handle"),e,h,m;if(!a.options.disabled){switch(c.keyCode){case b.ui.keyCode.HOME:case b.ui.keyCode.END:case b.ui.keyCode.PAGE_UP:case b.ui.keyCode.PAGE_DOWN:case b.ui.keyCode.UP:case b.ui.keyCode.RIGHT:case b.ui.keyCode.DOWN:case b.ui.keyCode.LEFT:if(d=!1,!a._keySliding&&(a._keySliding=!0,b(this).addClass("ui-state-active"),e=a._start(c,g),!1===e))return}m=a.options.step;e=a.options.values&&a.options.values.length?h=a.values(g):
h=a.value();switch(c.keyCode){case b.ui.keyCode.HOME:h=a._valueMin();break;case b.ui.keyCode.END:h=a._valueMax();break;case b.ui.keyCode.PAGE_UP:h=a._trimAlignValue(e+(a._valueMax()-a._valueMin())/5);break;case b.ui.keyCode.PAGE_DOWN:h=a._trimAlignValue(e-(a._valueMax()-a._valueMin())/5);break;case b.ui.keyCode.UP:case b.ui.keyCode.RIGHT:if(e===a._valueMax())return;h=a._trimAlignValue(e+m);break;case b.ui.keyCode.DOWN:case b.ui.keyCode.LEFT:if(e===a._valueMin())return;h=a._trimAlignValue(e-m)}a._slide(c,
g,h);return d}}).keyup(function(c){var d=b(this).data("index.ui-slider-handle");a._keySliding&&(a._keySliding=!1,a._stop(c,d),a._change(c,d),b(this).removeClass("ui-state-active"))});this._refreshValue();this._animateOff=!1},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();return this},_mouseCapture:function(a){var c=
this.options,d,g,h,e,f;if(c.disabled)return!1;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();d=this._normValueFromMouse({x:a.pageX,y:a.pageY});g=this._valueMax()-this._valueMin()+1;e=this;this.handles.each(function(a){var c=Math.abs(d-e.values(a));g>c&&(g=c,h=b(this),f=a)});!0===c.range&&this.values(1)===c.min&&(f+=1,h=b(this.handles[f]));if(!1===this._start(a,f))return!1;this._mouseSliding=!0;e._handleIndex=f;h.addClass("ui-state-active").focus();
c=h.offset();this._clickOffset=!b(a.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:a.pageX-c.left-h.width()/2,top:a.pageY-c.top-h.height()/2-(parseInt(h.css("borderTopWidth"),10)||0)-(parseInt(h.css("borderBottomWidth"),10)||0)+(parseInt(h.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(a,f,d);return this._animateOff=!0},_mouseStart:function(){return!0},_mouseDrag:function(b){var c=this._normValueFromMouse({x:b.pageX,y:b.pageY});this._slide(b,
this._handleIndex,c);return!1},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._mouseSliding=!1;this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(b){var c;"horizontal"===this.orientation?(c=this.elementSize.width,b=b.x-this.elementOffset.left-(this._clickOffset?
this._clickOffset.left:0)):(c=this.elementSize.height,b=b.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0));c=b/c;1<c&&(c=1);0>c&&(c=0);"vertical"===this.orientation&&(c=1-c);b=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+c*b)},_start:function(b,c){var d={handle:this.handles[c],value:this.value()};this.options.values&&this.options.values.length&&(d.value=this.values(c),d.values=this.values());return this._trigger("start",b,d)},_slide:function(b,
c,d){var g;if(this.options.values&&this.options.values.length){g=this.values(c?0:1);if(2===this.options.values.length&&!0===this.options.range&&(0===c&&d>g||1===c&&d<g))d=g;d!==this.values(c)&&(g=this.values(),g[c]=d,b=this._trigger("slide",b,{handle:this.handles[c],value:d,values:g}),this.values(c?0:1),!1!==b&&this.values(c,d,!0))}else d!==this.value()&&(b=this._trigger("slide",b,{handle:this.handles[c],value:d}),!1!==b&&this.value(d))},_stop:function(b,c){var d={handle:this.handles[c],value:this.value()};
this.options.values&&this.options.values.length&&(d.value=this.values(c),d.values=this.values());this._trigger("stop",b,d)},_change:function(b,c){if(!this._keySliding&&!this._mouseSliding){var d={handle:this.handles[c],value:this.value()};this.options.values&&this.options.values.length&&(d.value=this.values(c),d.values=this.values());this._trigger("change",b,d)}},value:function(b){if(arguments.length)this.options.value=this._trimAlignValue(b),this._refreshValue(),this._change(null,0);else return this._value()},
values:function(a,c){var d,g,h;if(1<arguments.length)this.options.values[a]=this._trimAlignValue(c),this._refreshValue(),this._change(null,a);else if(arguments.length)if(b.isArray(arguments[0])){d=this.options.values;g=arguments[0];for(h=0;h<d.length;h+=1)d[h]=this._trimAlignValue(g[h]),this._change(null,h);this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(a):this.value();else return this._values()},_setOption:function(a,c){var d,g=0;b.isArray(this.options.values)&&
(g=this.options.values.length);b.Widget.prototype._setOption.apply(this,arguments);switch(a){case "disabled":c?(this.handles.filter(".ui-state-focus").blur(),this.handles.removeClass("ui-state-hover"),this.handles.attr("disabled","disabled"),this.element.addClass("ui-disabled")):(this.handles.removeAttr("disabled"),this.element.removeClass("ui-disabled"));break;case "orientation":this._detectOrientation();this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);
this._refreshValue();break;case "value":this._animateOff=!0;this._refreshValue();this._change(null,0);this._animateOff=!1;break;case "values":this._animateOff=!0;this._refreshValue();for(d=0;d<g;d+=1)this._change(null,d);this._animateOff=!1}},_value:function(){var b=this.options.value;return b=this._trimAlignValue(b)},_values:function(b){var c,d;if(arguments.length)return c=this.options.values[b],c=this._trimAlignValue(c);c=this.options.values.slice();for(d=0;d<c.length;d+=1)c[d]=this._trimAlignValue(c[d]);
return c},_trimAlignValue:function(b){if(b<=this._valueMin())return this._valueMin();if(b>=this._valueMax())return this._valueMax();var c=0<this.options.step?this.options.step:1,d=(b-this._valueMin())%c;alignValue=b-d;2*Math.abs(d)>=c&&(alignValue+=0<d?c:-c);return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var a=this.options.range,c=this.options,d=this,g=!this._animateOff?c.animate:!1,h,e=
{},f,i,j,k;if(this.options.values&&this.options.values.length)this.handles.each(function(a){h=100*((d.values(a)-d._valueMin())/(d._valueMax()-d._valueMin()));e["horizontal"===d.orientation?"left":"bottom"]=h+"%";b(this).stop(1,1)[g?"animate":"css"](e,c.animate);if(!0===d.options.range)if("horizontal"===d.orientation){if(0===a)d.range.stop(1,1)[g?"animate":"css"]({left:h+"%"},c.animate);if(1===a)d.range[g?"animate":"css"]({width:h-f+"%"},{queue:!1,duration:c.animate})}else{if(0===a)d.range.stop(1,
1)[g?"animate":"css"]({bottom:h+"%"},c.animate);if(1===a)d.range[g?"animate":"css"]({height:h-f+"%"},{queue:!1,duration:c.animate})}f=h});else{i=this.value();j=this._valueMin();k=this._valueMax();h=k!==j?100*((i-j)/(k-j)):0;e["horizontal"===d.orientation?"left":"bottom"]=h+"%";this.handle.stop(1,1)[g?"animate":"css"](e,c.animate);if("min"===a&&"horizontal"===this.orientation)this.range.stop(1,1)[g?"animate":"css"]({width:h+"%"},c.animate);if("max"===a&&"horizontal"===this.orientation)this.range[g?
"animate":"css"]({width:100-h+"%"},{queue:!1,duration:c.animate});if("min"===a&&"vertical"===this.orientation)this.range.stop(1,1)[g?"animate":"css"]({height:h+"%"},c.animate);if("max"===a&&"vertical"===this.orientation)this.range[g?"animate":"css"]({height:100-h+"%"},{queue:!1,duration:c.animate})}}});b.extend(b.ui.slider,{version:"1.8.14"})})(jQuery);
(function(b,a){var c=0,d=0;b.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:!1,cookie:null,collapsible:!1,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(!0)},_setOption:function(b,a){"selected"==b?this.options.collapsible&&a==this.options.selected||this.select(a):
(this.options[b]=a,this._tabify())},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+ ++c},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var a=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+ ++d);return b.cookie.apply(null,[a].concat(b.makeArray(arguments)))},_ui:function(b,a){return{tab:b,panel:a,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var a=
b(this);a.html(a.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function d(a,c){a.css("display","");!b.support.opacity&&c.opacity&&a[0].style.removeAttribute("filter")}var e=this,f=this.options,i=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=b(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return b("a",this)[0]});this.panels=b([]);this.anchors.each(function(a,c){var d=b(c).attr("href"),g=d.split("#")[0],h;if(g&&(g===location.toString().split("#")[0]||
(h=b("base")[0])&&g===h.href))d=c.hash,c.href=d;i.test(d)?e.panels=e.panels.add(e.element.find(e._sanitizeSelector(d))):d&&"#"!==d?(b.data(c,"href.tabs",d),b.data(c,"load.tabs",d.replace(/#.*$/,"")),d=e._tabId(c),c.href="#"+d,g=e.element.find("#"+d),g.length||(g=b(f.panelTemplate).attr("id",d).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(e.panels[a-1]||e.list),g.data("destroy.tabs",!0)),e.panels=e.panels.add(g)):f.disabled.push(a)});c?(this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"),
this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),this.lis.addClass("ui-state-default ui-corner-top"),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom"),f.selected===a?(location.hash&&this.anchors.each(function(b,a){if(a.hash==location.hash)return f.selected=b,!1}),"number"!==typeof f.selected&&f.cookie&&(f.selected=parseInt(e._cookie(),10)),"number"!==typeof f.selected&&this.lis.filter(".ui-tabs-selected").length&&(f.selected=
this.lis.index(this.lis.filter(".ui-tabs-selected"))),f.selected=f.selected||(this.lis.length?0:-1)):null===f.selected&&(f.selected=-1),f.selected=0<=f.selected&&this.anchors[f.selected]||0>f.selected?f.selected:0,f.disabled=b.unique(f.disabled.concat(b.map(this.lis.filter(".ui-state-disabled"),function(b){return e.lis.index(b)}))).sort(),-1!=b.inArray(f.selected,f.disabled)&&f.disabled.splice(b.inArray(f.selected,f.disabled),1),this.panels.addClass("ui-tabs-hide"),this.lis.removeClass("ui-tabs-selected ui-state-active"),
0<=f.selected&&this.anchors.length&&(e.element.find(e._sanitizeSelector(e.anchors[f.selected].hash)).removeClass("ui-tabs-hide"),this.lis.eq(f.selected).addClass("ui-tabs-selected ui-state-active"),e.element.queue("tabs",function(){e._trigger("show",null,e._ui(e.anchors[f.selected],e.element.find(e._sanitizeSelector(e.anchors[f.selected].hash))[0]))}),this.load(f.selected)),b(window).bind("unload",function(){e.lis.add(e.anchors).unbind(".tabs");e.lis=e.anchors=e.panels=null})):f.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
this.element[f.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");f.cookie&&this._cookie(f.selected,f.cookie);for(var c=0,j;j=this.lis[c];c++)b(j)[-1!=b.inArray(c,f.disabled)&&!b(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");!1===f.cache&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if("mouseover"!==f.event){var k=function(b,a){a.is(":not(.ui-state-disabled)")&&a.addClass("ui-state-"+b)};this.lis.bind("mouseover.tabs",
function(){k("hover",b(this))});this.lis.bind("mouseout.tabs",function(){b(this).removeClass("ui-state-hover")});this.anchors.bind("focus.tabs",function(){k("focus",b(this).closest("li"))});this.anchors.bind("blur.tabs",function(){b(this).closest("li").removeClass("ui-state-focus")})}var l,m;f.fx&&(b.isArray(f.fx)?(l=f.fx[0],m=f.fx[1]):l=m=f.fx);var p=m?function(a,c){b(a).closest("li").addClass("ui-tabs-selected ui-state-active");c.hide().removeClass("ui-tabs-hide").animate(m,m.duration||"normal",
function(){d(c,m);e._trigger("show",null,e._ui(a,c[0]))})}:function(a,c){b(a).closest("li").addClass("ui-tabs-selected ui-state-active");c.removeClass("ui-tabs-hide");e._trigger("show",null,e._ui(a,c[0]))},n=l?function(b,a){a.animate(l,l.duration||"normal",function(){e.lis.removeClass("ui-tabs-selected ui-state-active");a.addClass("ui-tabs-hide");d(a,l);e.element.dequeue("tabs")})}:function(b,a){e.lis.removeClass("ui-tabs-selected ui-state-active");a.addClass("ui-tabs-hide");e.element.dequeue("tabs")};
this.anchors.bind(f.event+".tabs",function(){var a=this,c=b(a).closest("li"),d=e.panels.filter(":not(.ui-tabs-hide)"),i=e.element.find(e._sanitizeSelector(a.hash));if(c.hasClass("ui-tabs-selected")&&!f.collapsible||c.hasClass("ui-state-disabled")||c.hasClass("ui-state-processing")||e.panels.filter(":animated").length||e._trigger("select",null,e._ui(this,i[0]))===false){this.blur();return false}f.selected=e.anchors.index(this);e.abort();if(f.collapsible){if(c.hasClass("ui-tabs-selected")){f.selected=
-1;f.cookie&&e._cookie(f.selected,f.cookie);e.element.queue("tabs",function(){n(a,d)}).dequeue("tabs");this.blur();return false}if(!d.length){f.cookie&&e._cookie(f.selected,f.cookie);e.element.queue("tabs",function(){p(a,i)});e.load(e.anchors.index(this));this.blur();return false}}f.cookie&&e._cookie(f.selected,f.cookie);if(i.length){d.length&&e.element.queue("tabs",function(){n(a,d)});e.element.queue("tabs",function(){p(a,i)});e.load(e.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
b.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){"string"==typeof b&&(b=this.anchors.index(this.anchors.filter("[href$="+b+"]")));return b},destroy:function(){var a=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var a=
b.data(this,"href.tabs");a&&(this.href=a);var c=b(this).unbind(".tabs");b.each(["href","load","cache"],function(b,a){c.removeData(a+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){b.data(this,"destroy.tabs")?b(this).remove():b(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});a.cookie&&this._cookie(null,a.cookie);return this},add:function(c,
d,e){e===a&&(e=this.anchors.length);var f=this,i=this.options,d=b(i.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,d)),c=!c.indexOf("#")?c.replace("#",""):this._tabId(b("a",d)[0]);d.addClass("ui-state-default ui-corner-top").data("destroy.tabs",!0);var j=f.element.find("#"+c);j.length||(j=b(i.panelTemplate).attr("id",c).data("destroy.tabs",!0));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");e>=this.lis.length?(d.appendTo(this.list),j.appendTo(this.list[0].parentNode)):
(d.insertBefore(this.lis[e]),j.insertBefore(this.panels[e]));i.disabled=b.map(i.disabled,function(b){return b>=e?++b:b});this._tabify();1==this.anchors.length&&(i.selected=0,d.addClass("ui-tabs-selected ui-state-active"),j.removeClass("ui-tabs-hide"),this.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[0],f.panels[0]))}),this.load(0));this._trigger("add",null,this._ui(this.anchors[e],this.panels[e]));return this},remove:function(a){var a=this._getIndex(a),c=this.options,d=this.lis.eq(a).remove(),
f=this.panels.eq(a).remove();d.hasClass("ui-tabs-selected")&&1<this.anchors.length&&this.select(a+(a+1<this.anchors.length?1:-1));c.disabled=b.map(b.grep(c.disabled,function(b){return b!=a}),function(b){return b>=a?--b:b});this._tabify();this._trigger("remove",null,this._ui(d.find("a")[0],f[0]));return this},enable:function(a){var a=this._getIndex(a),c=this.options;if(-1!=b.inArray(a,c.disabled))return this.lis.eq(a).removeClass("ui-state-disabled"),c.disabled=b.grep(c.disabled,function(b){return b!=
a}),this._trigger("enable",null,this._ui(this.anchors[a],this.panels[a])),this},disable:function(b){var b=this._getIndex(b),a=this.options;b!=a.selected&&(this.lis.eq(b).addClass("ui-state-disabled"),a.disabled.push(b),a.disabled.sort(),this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b])));return this},select:function(b){b=this._getIndex(b);if(-1==b)if(this.options.collapsible&&-1!=this.options.selected)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+
".tabs");return this},load:function(a){var a=this._getIndex(a),c=this,d=this.options,f=this.anchors.eq(a)[0],i=b.data(f,"load.tabs");this.abort();if(!i||0!==this.element.queue("tabs").length&&b.data(f,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(a).addClass("ui-state-processing");if(d.spinner){var j=b("span",f);j.data("label.tabs",j.html()).html(d.spinner)}this.xhr=b.ajax(b.extend({},d.ajaxOptions,{url:i,success:function(i,j){c.element.find(c._sanitizeSelector(f.hash)).html(i);c._cleanup();
d.cache&&b.data(f,"cache.tabs",!0);c._trigger("load",null,c._ui(c.anchors[a],c.panels[a]));try{d.ajaxOptions.success(i,j)}catch(m){}},error:function(b,i){c._cleanup();c._trigger("load",null,c._ui(c.anchors[a],c.panels[a]));try{d.ajaxOptions.error(b,i,a,f)}catch(m){}}}));c.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(!1,!0);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));this.xhr&&(this.xhr.abort(),delete this.xhr);this._cleanup();
return this},url:function(b,a){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",a);return this},length:function(){return this.anchors.length}});b.extend(b.ui.tabs,{version:"1.8.14"});b.extend(b.ui.tabs.prototype,{rotation:null,rotate:function(b,a){var c=this,f=this.options,d=c._rotate||(c._rotate=function(a){clearTimeout(c.rotation);c.rotation=setTimeout(function(){var b=f.selected;c.select(++b<c.anchors.length?b:0)},b);a&&a.stopPropagation()}),j=c._unrotate||(c._unrotate=!a?function(b){b.clientX&&
c.rotate(null)}:function(){t=f.selected;d()});b?(this.element.bind("tabsshow",d),this.anchors.bind(f.event+".tabs",j),d()):(clearTimeout(c.rotation),this.element.unbind("tabsshow",d),this.anchors.unbind(f.event+".tabs",j),delete this._rotate,delete this._unrotate);return this}})})(jQuery);
(function(b,a){function c(){this.debug=!1;this._curInst=null;this._keyEvent=!1;this._disabledInputs=[];this._inDialog=this._datepickerShowing=!1;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:"January February March April May June July August September October November December".split(" "),monthNamesShort:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),dayNames:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),dayNamesShort:"Sun Mon Tue Wed Thu Fri Sat".split(" "),dayNamesMin:"Su Mo Tu We Th Fr Sa".split(" "),
weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,
beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1};b.extend(this._defaults,this.regional[""]);this.dpDiv=d(b('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function d(a){return a.bind("mouseout",function(a){a=b(a.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");
a.length&&a.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(c){c=b(c.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!b.datepicker._isDisabledDatepicker(e.inline?a.parent()[0]:e.input[0])&&c.length)c.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),c.addClass("ui-state-hover"),c.hasClass("ui-datepicker-prev")&&c.addClass("ui-datepicker-prev-hover"),c.hasClass("ui-datepicker-next")&&
c.addClass("ui-datepicker-next-hover")})}function g(c,d){b.extend(c,d);for(var e in d)if(null==d[e]||d[e]==a)c[e]=d[e];return c}b.extend(b.ui,{datepicker:{version:"1.8.14"}});var h=(new Date).getTime(),e;b.extend(c.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(b){g(this._defaults,b||{});return this},_attachDatepicker:function(a,c){var d=null,e;for(e in this._defaults){var g=
a.getAttribute("date:"+e);if(g){d=d||{};try{d[e]=eval(g)}catch(m){d[e]=g}}}e=a.nodeName.toLowerCase();g="div"==e||"span"==e;a.id||(this.uuid+=1,a.id="dp"+this.uuid);var h=this._newInst(b(a),g);h.settings=b.extend({},c||{},d||{});"input"==e?this._connectDatepicker(a,h):g&&this._inlineDatepicker(a,h)},_newInst:function(a,c){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:c,dpDiv:!c?this.dpDiv:d(b('<div class="'+
this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(a,c){var d=b(a);c.append=b([]);c.trigger=b([]);d.hasClass(this.markerClassName)||(this._attachments(d,c),d.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(b,a,f){c.settings[a]=f}).bind("getData.datepicker",function(b,a){return this._get(c,a)}),this._autoSize(c),b.data(a,"datepicker",
c))},_attachments:function(a,c){var d=this._get(c,"appendText"),e=this._get(c,"isRTL");c.append&&c.append.remove();d&&(c.append=b('<span class="'+this._appendClass+'">'+d+"</span>"),a[e?"before":"after"](c.append));a.unbind("focus",this._showDatepicker);c.trigger&&c.trigger.remove();d=this._get(c,"showOn");("focus"==d||"both"==d)&&a.focus(this._showDatepicker);if("button"==d||"both"==d){var d=this._get(c,"buttonText"),g=this._get(c,"buttonImage");c.trigger=b(this._get(c,"buttonImageOnly")?b("<img/>").addClass(this._triggerClass).attr({src:g,
alt:d,title:d}):b('<button type="button"></button>').addClass(this._triggerClass).html(""==g?d:b("<img/>").attr({src:g,alt:d,title:d})));a[e?"before":"after"](c.trigger);c.trigger.click(function(){b.datepicker._datepickerShowing&&b.datepicker._lastInput==a[0]?b.datepicker._hideDatepicker():b.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(b){if(this._get(b,"autoSize")&&!b.inline){var a=new Date(2009,11,20),c=this._get(b,"dateFormat");if(c.match(/[DM]/)){var d=function(b){for(var a=
0,c=0,f=0;f<b.length;f++)b[f].length>a&&(a=b[f].length,c=f);return c};a.setMonth(d(this._get(b,c.match(/MM/)?"monthNames":"monthNamesShort")));a.setDate(d(this._get(b,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())}b.input.attr("size",this._formatDate(b,a).length)}},_inlineDatepicker:function(a,c){var d=b(a);d.hasClass(this.markerClassName)||(d.addClass(this.markerClassName).append(c.dpDiv).bind("setData.datepicker",function(b,a,f){c.settings[a]=f}).bind("getData.datepicker",function(b,
a){return this._get(c,a)}),b.data(a,"datepicker",c),this._setDate(c,this._getDefaultDate(c),!0),this._updateDatepicker(c),this._updateAlternate(c),c.dpDiv.show())},_dialogDatepicker:function(a,c,d,e,h){a=this._dialogInst;a||(this.uuid+=1,this._dialogInput=b('<input type="text" id="dp'+this.uuid+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>'),this._dialogInput.keydown(this._doKeyDown),b("body").append(this._dialogInput),a=this._dialogInst=this._newInst(this._dialogInput,!1),
a.settings={},b.data(this._dialogInput[0],"datepicker",a));g(a.settings,e||{});c=c&&c.constructor==Date?this._formatDate(a,c):c;this._dialogInput.val(c);this._pos=h?h.length?h:[h.pageX,h.pageY]:null;this._pos||(this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)]);this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+
"px");a.settings.onSelect=d;this._inDialog=!0;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);b.blockUI&&b.blockUI(this.dpDiv);b.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var c=b(a),d=b.data(a,"datepicker");if(c.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();b.removeData(a,"datepicker");"input"==e?(d.append.remove(),d.trigger.remove(),c.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",
this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"==e||"span"==e)&&c.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var c=b(a),d=b.data(a,"datepicker");if(c.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if("input"==e)a.disabled=!1,d.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""});else if("div"==e||"span"==e)c=c.children("."+this._inlineClass),c.children().removeClass("ui-state-disabled"),
c.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled");this._disabledInputs=b.map(this._disabledInputs,function(b){return b==a?null:b})}},_disableDatepicker:function(a){var c=b(a),d=b.data(a,"datepicker");if(c.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if("input"==e)a.disabled=!0,d.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"});else if("div"==e||"span"==e)c=c.children("."+this._inlineClass),
c.children().addClass("ui-state-disabled"),c.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled");this._disabledInputs=b.map(this._disabledInputs,function(b){return b==a?null:b});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(b){if(!b)return!1;for(var a=0;a<this._disabledInputs.length;a++)if(this._disabledInputs[a]==b)return!0;return!1},_getInst:function(a){try{return b.data(a,"datepicker")}catch(c){throw"Missing instance data for this datepicker";
}},_optionDatepicker:function(c,d,e){var h=this._getInst(c);if(2==arguments.length&&"string"==typeof d)return"defaults"==d?b.extend({},b.datepicker._defaults):h?"all"==d?b.extend({},h.settings):this._get(h,d):null;var l=d||{};"string"==typeof d&&(l={},l[d]=e);if(h){this._curInst==h&&this._hideDatepicker();var m=this._getDateDatepicker(c,!0),p=this._getMinMaxDate(h,"min"),n=this._getMinMaxDate(h,"max");g(h.settings,l);null!==p&&(l.dateFormat!==a&&l.minDate===a)&&(h.settings.minDate=this._formatDate(h,
p));null!==n&&(l.dateFormat!==a&&l.maxDate===a)&&(h.settings.maxDate=this._formatDate(h,n));this._attachments(b(c),h);this._autoSize(h);this._setDate(h,m);this._updateAlternate(h);this._updateDatepicker(h)}},_changeDatepicker:function(b,a,c){this._optionDatepicker(b,a,c)},_refreshDatepicker:function(b){(b=this._getInst(b))&&this._updateDatepicker(b)},_setDateDatepicker:function(b,a){var c=this._getInst(b);c&&(this._setDate(c,a),this._updateDatepicker(c),this._updateAlternate(c))},_getDateDatepicker:function(b,
a){var c=this._getInst(b);c&&!c.inline&&this._setDateFromField(c,a);return c?this._getDate(c):null},_doKeyDown:function(a){var c=b.datepicker._getInst(a.target),d=!0,e=c.dpDiv.is(".ui-datepicker-rtl");c._keyEvent=!0;if(b.datepicker._datepickerShowing)switch(a.keyCode){case 9:b.datepicker._hideDatepicker();d=!1;break;case 13:return d=b("td."+b.datepicker._dayOverClass+":not(."+b.datepicker._currentClass+")",c.dpDiv),d[0]?b.datepicker._selectDay(a.target,c.selectedMonth,c.selectedYear,d[0]):b.datepicker._hideDatepicker(),
!1;case 27:b.datepicker._hideDatepicker();break;case 33:b.datepicker._adjustDate(a.target,a.ctrlKey?-b.datepicker._get(c,"stepBigMonths"):-b.datepicker._get(c,"stepMonths"),"M");break;case 34:b.datepicker._adjustDate(a.target,a.ctrlKey?+b.datepicker._get(c,"stepBigMonths"):+b.datepicker._get(c,"stepMonths"),"M");break;case 35:(a.ctrlKey||a.metaKey)&&b.datepicker._clearDate(a.target);d=a.ctrlKey||a.metaKey;break;case 36:(a.ctrlKey||a.metaKey)&&b.datepicker._gotoToday(a.target);d=a.ctrlKey||a.metaKey;
break;case 37:if(a.ctrlKey||a.metaKey)b.datepicker._adjustDate(a.target,e?1:-1,"D");d=a.ctrlKey||a.metaKey;a.originalEvent.altKey&&b.datepicker._adjustDate(a.target,a.ctrlKey?-b.datepicker._get(c,"stepBigMonths"):-b.datepicker._get(c,"stepMonths"),"M");break;case 38:(a.ctrlKey||a.metaKey)&&b.datepicker._adjustDate(a.target,-7,"D");d=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)b.datepicker._adjustDate(a.target,e?-1:1,"D");d=a.ctrlKey||a.metaKey;a.originalEvent.altKey&&b.datepicker._adjustDate(a.target,
a.ctrlKey?+b.datepicker._get(c,"stepBigMonths"):+b.datepicker._get(c,"stepMonths"),"M");break;case 40:(a.ctrlKey||a.metaKey)&&b.datepicker._adjustDate(a.target,7,"D");d=a.ctrlKey||a.metaKey;break;default:d=!1}else 36==a.keyCode&&a.ctrlKey?b.datepicker._showDatepicker(this):d=!1;d&&(a.preventDefault(),a.stopPropagation())},_doKeyPress:function(c){var d=b.datepicker._getInst(c.target);if(b.datepicker._get(d,"constrainInput")){var d=b.datepicker._possibleChars(b.datepicker._get(d,"dateFormat")),e=String.fromCharCode(c.charCode==
a?c.keyCode:c.charCode);return c.ctrlKey||c.metaKey||" ">e||!d||-1<d.indexOf(e)}},_doKeyUp:function(a){a=b.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(b.datepicker.parseDate(b.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,b.datepicker._getFormatConfig(a)))b.datepicker._setDateFromField(a),b.datepicker._updateAlternate(a),b.datepicker._updateDatepicker(a)}catch(c){b.datepicker.log(c)}return!0},_showDatepicker:function(a){a=a.target||a;"input"!=a.nodeName.toLowerCase()&&
(a=b("input",a.parentNode)[0]);if(!(b.datepicker._isDisabledDatepicker(a)||b.datepicker._lastInput==a)){var c=b.datepicker._getInst(a);b.datepicker._curInst&&b.datepicker._curInst!=c&&(b.datepicker._datepickerShowing&&b.datepicker._triggerOnClose(b.datepicker._curInst),b.datepicker._curInst.dpDiv.stop(!0,!0));var d=b.datepicker._get(c,"beforeShow");g(c.settings,d?d.apply(a,[a,c]):{});c.lastVal=null;b.datepicker._lastInput=a;b.datepicker._setDateFromField(c);b.datepicker._inDialog&&(a.value="");b.datepicker._pos||
(b.datepicker._pos=b.datepicker._findPos(a),b.datepicker._pos[1]+=a.offsetHeight);var e=!1;b(a).parents().each(function(){e=e|b(this).css("position")=="fixed";return!e});e&&b.browser.opera&&(b.datepicker._pos[0]-=document.documentElement.scrollLeft,b.datepicker._pos[1]-=document.documentElement.scrollTop);d={left:b.datepicker._pos[0],top:b.datepicker._pos[1]};b.datepicker._pos=null;c.dpDiv.empty();c.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});b.datepicker._updateDatepicker(c);d=
b.datepicker._checkOffset(c,d,e);c.dpDiv.css({position:b.datepicker._inDialog&&b.blockUI?"static":e?"fixed":"absolute",display:"none",left:d.left+"px",top:d.top+"px"});if(!c.inline){var d=b.datepicker._get(c,"showAnim"),h=b.datepicker._get(c,"duration"),m=function(){var a=c.dpDiv.find("iframe.ui-datepicker-cover");if(a.length){var f=b.datepicker._getBorders(c.dpDiv);a.css({left:-f[0],top:-f[1],width:c.dpDiv.outerWidth(),height:c.dpDiv.outerHeight()})}};c.dpDiv.zIndex(b(a).zIndex()+1);b.datepicker._datepickerShowing=
!0;if(b.effects&&b.effects[d])c.dpDiv.show(d,b.datepicker._get(c,"showOptions"),h,m);else c.dpDiv[d||"show"](d?h:null,m);(!d||!h)&&m();c.input.is(":visible")&&!c.input.is(":disabled")&&c.input.focus();b.datepicker._curInst=c}}},_updateDatepicker:function(a){this.maxRows=4;var c=b.datepicker._getBorders(a.dpDiv);e=a;a.dpDiv.empty().append(this._generateHTML(a));var d=a.dpDiv.find("iframe.ui-datepicker-cover");d.length&&d.css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});
a.dpDiv.find("."+this._dayOverClass+" a").mouseover();c=this._getNumberOfMonths(a);d=c[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");1<d&&a.dpDiv.addClass("ui-datepicker-multi-"+d).css("width",17*d+"em");a.dpDiv[(1!=c[0]||1!=c[1]?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==b.datepicker._curInst&&(b.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&
!a.input.is(":disabled")&&a.input[0]!=document.activeElement)&&a.input.focus();if(a.yearshtml){var g=a.yearshtml;setTimeout(function(){g===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);g=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(a){return{thin:1,medium:2,thick:3}[a]||a};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,c,d){var e=a.dpDiv.outerWidth(),g=a.dpDiv.outerHeight(),
h=a.input?a.input.outerWidth():0,p=a.input?a.input.outerHeight():0,n=document.documentElement.clientWidth+b(document).scrollLeft(),q=document.documentElement.clientHeight+b(document).scrollTop();c.left-=this._get(a,"isRTL")?e-h:0;c.left-=d&&c.left==a.input.offset().left?b(document).scrollLeft():0;c.top-=d&&c.top==a.input.offset().top+p?b(document).scrollTop():0;c.left-=Math.min(c.left,c.left+e>n&&n>e?Math.abs(c.left+e-n):0);c.top-=Math.min(c.top,c.top+g>q&&q>g?Math.abs(g+p):0);return c},_findPos:function(a){for(var c=
this._get(this._getInst(a),"isRTL");a&&("hidden"==a.type||1!=a.nodeType||b.expr.filters.hidden(a));)a=a[c?"previousSibling":"nextSibling"];a=b(a).offset();return[a.left,a.top]},_triggerOnClose:function(a){var b=this._get(a,"onClose");b&&b.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a])},_hideDatepicker:function(a){var c=this._curInst;if(c&&!(a&&c!=b.data(a,"datepicker"))&&this._datepickerShowing){var a=this._get(c,"showAnim"),d=this._get(c,"duration"),e=function(){b.datepicker._tidyDialog(c);
this._curInst=null};if(b.effects&&b.effects[a])c.dpDiv.hide(a,b.datepicker._get(c,"showOptions"),d,e);else c.dpDiv["slideDown"==a?"slideUp":"fadeIn"==a?"fadeOut":"hide"](a?d:null,e);a||e();b.datepicker._triggerOnClose(c);this._datepickerShowing=!1;this._lastInput=null;this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),b.blockUI&&(b.unblockUI(),b("body").append(this.dpDiv)));this._inDialog=!1}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
_checkExternalClick:function(a){b.datepicker._curInst&&(a=b(a.target),a[0].id!=b.datepicker._mainDivId&&(0==a.parents("#"+b.datepicker._mainDivId).length&&!a.hasClass(b.datepicker.markerClassName)&&!a.hasClass(b.datepicker._triggerClass)&&b.datepicker._datepickerShowing&&(!b.datepicker._inDialog||!b.blockUI))&&b.datepicker._hideDatepicker())},_adjustDate:function(a,c,d){var a=b(a),e=this._getInst(a[0]);this._isDisabledDatepicker(a[0])||(this._adjustInstDate(e,c+("M"==d?this._get(e,"showCurrentAtPos"):
0),d),this._updateDatepicker(e))},_gotoToday:function(a){var a=b(a),c=this._getInst(a[0]);if(this._get(c,"gotoCurrent")&&c.currentDay)c.selectedDay=c.currentDay,c.drawMonth=c.selectedMonth=c.currentMonth,c.drawYear=c.selectedYear=c.currentYear;else{var d=new Date;c.selectedDay=d.getDate();c.drawMonth=c.selectedMonth=d.getMonth();c.drawYear=c.selectedYear=d.getFullYear()}this._notifyChange(c);this._adjustDate(a)},_selectMonthYear:function(a,c,d){var a=b(a),e=this._getInst(a[0]);e._selectingMonthYear=
!1;e["selected"+("M"==d?"Month":"Year")]=e["draw"+("M"==d?"Month":"Year")]=parseInt(c.options[c.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var c=this._getInst(b(a)[0]);c.input&&c._selectingMonthYear&&setTimeout(function(){c.input.focus()},0);c._selectingMonthYear=!c._selectingMonthYear},_selectDay:function(a,c,d,e){var g=b(a);!b(e).hasClass(this._unselectableClass)&&!this._isDisabledDatepicker(g[0])&&(g=this._getInst(g[0]),g.selectedDay=g.currentDay=
b("a",e).html(),g.selectedMonth=g.currentMonth=c,g.selectedYear=g.currentYear=d,this._selectDate(a,this._formatDate(g,g.currentDay,g.currentMonth,g.currentYear)))},_clearDate:function(a){a=b(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,c){var d=this._getInst(b(a)[0]),c=null!=c?c:this._formatDate(d);d.input&&d.input.val(c);this._updateAlternate(d);var e=this._get(d,"onSelect");e?e.apply(d.input?d.input[0]:null,[c,d]):d.input&&d.input.trigger("change");d.inline?this._updateDatepicker(d):
(this._hideDatepicker(),this._lastInput=d.input[0],"object"!=typeof d.input[0]&&d.input.focus(),this._lastInput=null)},_updateAlternate:function(a){var c=this._get(a,"altField");if(c){var d=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),g=this.formatDate(d,e,this._getFormatConfig(a));b(c).each(function(){b(this).val(g)})}},noWeekends:function(a){a=a.getDay();return[0<a&&6>a,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=
a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,c,d){if(null==a||null==c)throw"Invalid arguments";c="object"==typeof c?c.toString():c+"";if(""==c)return null;for(var e=(d?d.shortYearCutoff:null)||this._defaults.shortYearCutoff,e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),g=(d?d.dayNamesShort:null)||this._defaults.dayNamesShort,h=(d?d.dayNames:null)||this._defaults.dayNames,p=(d?d.monthNamesShort:null)||this._defaults.monthNamesShort,
n=(d?d.monthNames:null)||this._defaults.monthNames,q=d=-1,o=-1,w=-1,r=!1,u=function(b){(b=E+1<a.length&&a.charAt(E+1)==b)&&E++;return b},s=function(a){var b=u(a),a=RegExp("^\\d{1,"+("@"==a?14:"!"==a?20:"y"==a&&b?4:"o"==a?3:2)+"}"),a=c.substring(B).match(a);if(!a)throw"Missing number at position "+B;B+=a[0].length;return parseInt(a[0],10)},v=function(a,d,f){var a=b.map(u(a)?f:d,function(a,b){return[[b,a]]}).sort(function(a,b){return-(a[1].length-b[1].length)}),e=-1;b.each(a,function(a,b){var d=b[1];
if(c.substr(B,d.length).toLowerCase()==d.toLowerCase())return e=b[0],B+=d.length,!1});if(-1!=e)return e+1;throw"Unknown name at position "+B;},z=function(){if(c.charAt(B)!=a.charAt(E))throw"Unexpected literal at position "+B;B++},B=0,E=0;E<a.length;E++)if(r)"'"==a.charAt(E)&&!u("'")?r=!1:z();else switch(a.charAt(E)){case "d":o=s("d");break;case "D":v("D",g,h);break;case "o":w=s("o");break;case "m":q=s("m");break;case "M":q=v("M",p,n);break;case "y":d=s("y");break;case "@":var C=new Date(s("@")),d=
C.getFullYear(),q=C.getMonth()+1,o=C.getDate();break;case "!":C=new Date((s("!")-this._ticksTo1970)/1E4);d=C.getFullYear();q=C.getMonth()+1;o=C.getDate();break;case "'":u("'")?z():r=!0;break;default:z()}if(B<c.length)throw"Extra/unparsed characters found in date: "+c.substring(B);-1==d?d=(new Date).getFullYear():100>d&&(d+=(new Date).getFullYear()-(new Date).getFullYear()%100+(d<=e?0:-100));if(-1<w){q=1;o=w;do{e=this._getDaysInMonth(d,q-1);if(o<=e)break;q++;o-=e}while(1)}C=this._daylightSavingAdjust(new Date(d,
q-1,o));if(C.getFullYear()!=d||C.getMonth()+1!=q||C.getDate()!=o)throw"Invalid date";return C},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:864E9*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(a,b,c){if(!b)return"";var d=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,e=(c?c.dayNames:
null)||this._defaults.dayNames,g=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,c=(c?c.monthNames:null)||this._defaults.monthNames,h=function(b){(b=r+1<a.length&&a.charAt(r+1)==b)&&r++;return b},n=function(a,b,c){b=""+b;if(h(a))for(;b.length<c;)b="0"+b;return b},q=function(a,b,c,d){return h(a)?d[b]:c[b]},o="",w=!1;if(b)for(var r=0;r<a.length;r++)if(w)"'"==a.charAt(r)&&!h("'")?w=!1:o+=a.charAt(r);else switch(a.charAt(r)){case "d":o+=n("d",b.getDate(),2);break;case "D":o+=q("D",b.getDay(),
d,e);break;case "o":o+=n("o",Math.round(((new Date(b.getFullYear(),b.getMonth(),b.getDate())).getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864E5),3);break;case "m":o+=n("m",b.getMonth()+1,2);break;case "M":o+=q("M",b.getMonth(),g,c);break;case "y":o+=h("y")?b.getFullYear():(10>b.getYear()%100?"0":"")+b.getYear()%100;break;case "@":o+=b.getTime();break;case "!":o+=1E4*b.getTime()+this._ticksTo1970;break;case "'":h("'")?o+="'":w=!0;break;default:o+=a.charAt(r)}return o},_possibleChars:function(a){for(var b=
"",c=!1,d=function(b){(b=e+1<a.length&&a.charAt(e+1)==b)&&e++;return b},e=0;e<a.length;e++)if(c)"'"==a.charAt(e)&&!d("'")?c=!1:b+=a.charAt(e);else switch(a.charAt(e)){case "d":case "m":case "y":case "@":b+="0123456789";break;case "D":case "M":return null;case "'":d("'")?b+="'":c=!0;break;default:b+=a.charAt(e)}return b},_get:function(b,c){return b.settings[c]!==a?b.settings[c]:this._defaults[c]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),d=a.lastVal=
a.input?a.input.val():null,e,g;e=g=this._getDefaultDate(a);var h=this._getFormatConfig(a);try{e=this.parseDate(c,d,h)||g}catch(n){this.log(n),d=b?"":d}a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();a.currentDay=d?e.getDate():0;a.currentMonth=d?e.getMonth():0;a.currentYear=d?e.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,
c,d){var e=function(a){var b=new Date;b.setDate(b.getDate()+a);return b},g=function(c){try{return b.datepicker.parseDate(b.datepicker._get(a,"dateFormat"),c,b.datepicker._getFormatConfig(a))}catch(d){}for(var e=(c.toLowerCase().match(/^c/)?b.datepicker._getDate(a):null)||new Date,g=e.getFullYear(),h=e.getMonth(),e=e.getDate(),i=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=i.exec(c);l;){switch(l[2]||"d"){case "d":case "D":e+=parseInt(l[1],10);break;case "w":case "W":e+=7*parseInt(l[1],10);break;case "m":case "M":h+=
parseInt(l[1],10);e=Math.min(e,b.datepicker._getDaysInMonth(g,h));break;case "y":case "Y":g+=parseInt(l[1],10),e=Math.min(e,b.datepicker._getDaysInMonth(g,h))}l=i.exec(c)}return new Date(g,h,e)};if(c=(c=null==c||""===c?d:"string"==typeof c?g(c):"number"==typeof c?isNaN(c)?d:e(c):new Date(c.getTime()))&&"Invalid Date"==c.toString()?d:c)c.setHours(0),c.setMinutes(0),c.setSeconds(0),c.setMilliseconds(0);return this._daylightSavingAdjust(c)},_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(12<
a.getHours()?a.getHours()+2:0);return a},_setDate:function(a,b,c){var d=!b,e=a.selectedMonth,g=a.selectedYear,b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();(e!=a.selectedMonth||g!=a.selectedYear)&&!c&&this._notifyChange(a);this._adjustInstDate(a);a.input&&a.input.val(d?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||
a.input&&""==a.input.val()?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var c=new Date,c=this._daylightSavingAdjust(new Date(c.getFullYear(),c.getMonth(),c.getDate())),d=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),g=this._get(a,"hideIfNoPrevNext"),m=this._get(a,"navigationAsDateFormat"),p=this._getNumberOfMonths(a),n=this._get(a,"showCurrentAtPos"),q=this._get(a,"stepMonths"),o=1!=p[0]||1!=p[1],w=this._daylightSavingAdjust(!a.currentDay?
new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),r=this._getMinMaxDate(a,"min"),u=this._getMinMaxDate(a,"max"),n=a.drawMonth-n,s=a.drawYear;0>n&&(n+=12,s--);if(u)for(var v=this._daylightSavingAdjust(new Date(u.getFullYear(),u.getMonth()-p[0]*p[1]+1,u.getDate())),v=r&&v<r?r:v;this._daylightSavingAdjust(new Date(s,n,1))>v;)n--,0>n&&(n=11,s--);a.drawMonth=n;a.drawYear=s;var v=this._get(a,"prevText"),v=!m?v:this.formatDate(v,this._daylightSavingAdjust(new Date(s,n-q,1)),this._getFormatConfig(a)),
v=this._canAdjustMonth(a,-1,s,n)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+h+".datepicker._adjustDate('#"+a.id+"', -"+q+", 'M');\" title=\""+v+'"><span class="ui-icon ui-icon-circle-triangle-'+(d?"e":"w")+'">'+v+"</span></a>":g?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+v+'"><span class="ui-icon ui-icon-circle-triangle-'+(d?"e":"w")+'">'+v+"</span></a>",z=this._get(a,"nextText"),z=!m?z:this.formatDate(z,this._daylightSavingAdjust(new Date(s,
n+q,1)),this._getFormatConfig(a)),g=this._canAdjustMonth(a,1,s,n)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+h+".datepicker._adjustDate('#"+a.id+"', +"+q+", 'M');\" title=\""+z+'"><span class="ui-icon ui-icon-circle-triangle-'+(d?"w":"e")+'">'+z+"</span></a>":g?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+z+'"><span class="ui-icon ui-icon-circle-triangle-'+(d?"w":"e")+'">'+z+"</span></a>",q=this._get(a,"currentText"),z=this._get(a,"gotoCurrent")&&
a.currentDay?w:c,q=!m?q:this.formatDate(q,z,this._getFormatConfig(a)),m=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+h+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>":"",e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(d?m:"")+(this._isInRange(a,z)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
h+".datepicker._gotoToday('#"+a.id+"');\">"+q+"</button>":"")+(d?"":m)+"</div>":"",m=parseInt(this._get(a,"firstDay"),10),m=isNaN(m)?0:m,q=this._get(a,"showWeek"),z=this._get(a,"dayNames");this._get(a,"dayNamesShort");var B=this._get(a,"dayNamesMin"),E=this._get(a,"monthNames"),C=this._get(a,"monthNamesShort"),O=this._get(a,"beforeShowDay"),K=this._get(a,"showOtherMonths"),S=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var P=this._getDefaultDate(a),G="",H=0;H<p[0];H++){var L=
"";this.maxRows=4;for(var I=0;I<p[1];I++){var Q=this._daylightSavingAdjust(new Date(s,n,a.selectedDay)),A=" ui-corner-all",y="";if(o){y+='<div class="ui-datepicker-group';if(1<p[1])switch(I){case 0:y+=" ui-datepicker-group-first";A=" ui-corner-"+(d?"right":"left");break;case p[1]-1:y+=" ui-datepicker-group-last";A=" ui-corner-"+(d?"left":"right");break;default:y+=" ui-datepicker-group-middle",A=""}y+='">'}for(var y=y+('<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+A+'">'+(/all|left/.test(A)&&
0==H?d?g:v:"")+(/all|right/.test(A)&&0==H?d?v:g:"")+this._generateMonthYearHeader(a,n,s,r,u,0<H||0<I,E,C)+'</div><table class="ui-datepicker-calendar"><thead><tr>'),D=q?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"",A=0;7>A;A++)var x=(A+m)%7,D=D+("<th"+(5<=(A+m+6)%7?' class="ui-datepicker-week-end"':"")+'><span title="'+z[x]+'">'+B[x]+"</span></th>");y+=D+"</tr></thead><tbody>";D=this._getDaysInMonth(s,n);s==a.selectedYear&&n==a.selectedMonth&&(a.selectedDay=Math.min(a.selectedDay,
D));A=(this._getFirstDayOfMonth(s,n)-m+7)%7;D=Math.ceil((A+D)/7);this.maxRows=D=o?this.maxRows>D?this.maxRows:D:D;for(var x=this._daylightSavingAdjust(new Date(s,n,1-A)),R=0;R<D;R++){for(var y=y+"<tr>",M=!q?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(x)+"</td>",A=0;7>A;A++){var J=O?O.apply(a.input?a.input[0]:null,[x]):[!0,""],F=x.getMonth()!=n,N=F&&!S||!J[0]||r&&x<r||u&&x>u,M=M+('<td class="'+(5<=(A+m+6)%7?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+
(x.getTime()==Q.getTime()&&n==a.selectedMonth&&a._keyEvent||P.getTime()==x.getTime()&&P.getTime()==Q.getTime()?" "+this._dayOverClass:"")+(N?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!K?"":" "+J[1]+(x.getTime()==w.getTime()?" "+this._currentClass:"")+(x.getTime()==c.getTime()?" ui-datepicker-today":""))+'"'+((!F||K)&&J[2]?' title="'+J[2]+'"':"")+(N?"":' onclick="DP_jQuery_'+h+".datepicker._selectDay('#"+a.id+"',"+x.getMonth()+","+x.getFullYear()+', this);return false;"')+">"+(F&&!K?
"&#xa0;":N?'<span class="ui-state-default">'+x.getDate()+"</span>":'<a class="ui-state-default'+(x.getTime()==c.getTime()?" ui-state-highlight":"")+(x.getTime()==w.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+'" href="#">'+x.getDate()+"</a>")+"</td>");x.setDate(x.getDate()+1);x=this._daylightSavingAdjust(x)}y+=M+"</tr>"}n++;11<n&&(n=0,s++);y+="</tbody></table>"+(o?"</div>"+(0<p[0]&&I==p[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");L+=y}G+=L}G+=e+(b.browser.msie&&
7>parseInt(b.browser.version,10)&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':"");a._keyEvent=!1;return G},_generateMonthYearHeader:function(a,b,c,d,e,g,p,n){var q=this._get(a,"changeMonth"),o=this._get(a,"changeYear"),w=this._get(a,"showMonthAfterYear"),r='<div class="ui-datepicker-title">',u="";if(g||!q)u+='<span class="ui-datepicker-month">'+p[b]+"</span>";else{for(var p=d&&d.getFullYear()==c,s=e&&e.getFullYear()==c,u=u+('<select class="ui-datepicker-month" onchange="DP_jQuery_'+
h+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" onclick=\"DP_jQuery_"+h+".datepicker._clickMonthYear('#"+a.id+"');\">"),v=0;12>v;v++)if((!p||v>=d.getMonth())&&(!s||v<=e.getMonth()))u+='<option value="'+v+'"'+(v==b?' selected="selected"':"")+">"+n[v]+"</option>";u+="</select>"}w||(r+=u+(g||!q||!o?"&#xa0;":""));if(!a.yearshtml)if(a.yearshtml="",g||!o)r+='<span class="ui-datepicker-year">'+c+"</span>";else{var n=this._get(a,"yearRange").split(":"),z=(new Date).getFullYear(),p=function(a){a=
a.match(/c[+-].*/)?c+parseInt(a.substring(1),10):a.match(/[+-].*/)?z+parseInt(a,10):parseInt(a,10);return isNaN(a)?z:a},b=p(n[0]),n=Math.max(b,p(n[1]||"")),b=d?Math.max(b,d.getFullYear()):b,n=e?Math.min(n,e.getFullYear()):n;for(a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+h+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" onclick=\"DP_jQuery_"+h+".datepicker._clickMonthYear('#"+a.id+"');\">";b<=n;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':
"")+">"+b+"</option>";a.yearshtml+="</select>";r+=a.yearshtml;a.yearshtml=null}r+=this._get(a,"yearSuffix");w&&(r+=(g||!q||!o?"&#xa0;":"")+u);return r+"</div>"},_adjustInstDate:function(a,b,c){var d=a.drawYear+("Y"==c?b:0),e=a.drawMonth+("M"==c?b:0),b=Math.min(a.selectedDay,this._getDaysInMonth(d,e))+("D"==c?b:0),d=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(d,e,b)));a.selectedDay=d.getDate();a.drawMonth=a.selectedMonth=d.getMonth();a.drawYear=a.selectedYear=d.getFullYear();("M"==c||
"Y"==c)&&this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max"),c=c&&b<c?c:b;return d&&c>d?d:c},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");b&&b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return null==a?[1,1]:"number"==typeof a?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,
b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,d){var e=this._getNumberOfMonths(a),c=this._daylightSavingAdjust(new Date(c,d+(0>b?b:e[0]*e[1]),1));0>b&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!d||b.getTime()<=
d.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff"),b="string"!=typeof b?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,d){b||(a.currentDay=a.selectedDay,a.currentMonth=a.selectedMonth,a.currentYear=a.selectedYear);b=b?"object"==typeof b?b:this._daylightSavingAdjust(new Date(d,
c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});b.fn.datepicker=function(a){if(!this.length)return this;b.datepicker.initialized||(b(document).mousedown(b.datepicker._checkExternalClick).find("body").append(b.datepicker.dpDiv),b.datepicker.initialized=!0);var c=Array.prototype.slice.call(arguments,1);return"string"==typeof a&&("isDisabled"==a||"getDate"==a||"widget"==a)||"option"==
a&&2==arguments.length&&"string"==typeof arguments[1]?b.datepicker["_"+a+"Datepicker"].apply(b.datepicker,[this[0]].concat(c)):this.each(function(){typeof a=="string"?b.datepicker["_"+a+"Datepicker"].apply(b.datepicker,[this].concat(c)):b.datepicker._attachDatepicker(this,a)})};b.datepicker=new c;b.datepicker.initialized=!1;b.datepicker.uuid=(new Date).getTime();b.datepicker.version="1.8.14";window["DP_jQuery_"+h]=b})(jQuery);
(function(b,a){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(b){if(b===a)return this._value();this._setOption("value",b);return this},_setOption:function(a,d){"value"===a&&(this.options.value=d,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete"));b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;"number"!==typeof a&&(a=0);return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*
this._value()/this.options.max},_refreshValue:function(){var a=this.value(),b=this._percentage();this.oldValue!==a&&(this.oldValue=a,this._trigger("change"));this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(b.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.14"})})(jQuery);
jQuery.effects||function(b,a){function c(a){var c;return a&&a.constructor==Array&&3==a.length?a:(c=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(a))?[parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10)]:(c=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(a))?[2.55*parseFloat(c[1]),2.55*parseFloat(c[2]),2.55*parseFloat(c[3])]:(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(a))?[parseInt(c[1],16),parseInt(c[2],
16),parseInt(c[3],16)]:(c=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(a))?[parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16),parseInt(c[3]+c[3],16)]:/rgba\(0, 0, 0, 0\)/.exec(a)?i.transparent:i[b.trim(a).toLowerCase()]}function d(){var a=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,b={},c,d;if(a&&a.length&&a[0]&&a[a[0]])for(var e=a.length;e--;)c=a[e],"string"==typeof a[c]&&(d=c.replace(/\-(\w)/g,function(a,b){return b.toUpperCase()}),b[d]=a[c]);else for(c in a)"string"===
typeof a[c]&&(b[c]=a[c]);return b}function g(a){var c,d;for(c in a)d=a[c],(null==d||b.isFunction(d)||c in k||/scrollbar/.test(c)||!/color/i.test(c)&&isNaN(parseFloat(d)))&&delete a[c];return a}function h(a,b){var c={_:0},d;for(d in b)a[d]!=b[d]&&(c[d]=b[d]);return c}function e(a,c,d,e){"object"==typeof a&&(e=c,d=null,c=a,a=c.effect);b.isFunction(c)&&(e=c,d=null,c={});if("number"==typeof c||b.fx.speeds[c])e=d,d=c,c={};b.isFunction(d)&&(e=d,d=null);c=c||{};d=d||c.duration;d=b.fx.off?0:"number"==typeof d?
d:d in b.fx.speeds?b.fx.speeds[d]:b.fx.speeds._default;e=e||c.complete;return[a,c,d,e]}function f(a){return!a||("number"===typeof a||b.fx.speeds[a])||"string"===typeof a&&!b.effects[a]?!0:!1}b.effects={};b.each("backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor borderColor color outlineColor".split(" "),function(a,d){b.fx.step[d]=function(a){if(!a.colorInit){var e;e=a.elem;var f=d,g;do{g=b.curCSS(e,f);if(g!=""&&g!="transparent"||b.nodeName(e,"body"))break;f="backgroundColor"}while(e=
e.parentNode);e=c(g);a.start=e;a.end=c(a.end);a.colorInit=true}a.elem.style[d]="rgb("+Math.max(Math.min(parseInt(a.pos*(a.end[0]-a.start[0])+a.start[0],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[1]-a.start[1])+a.start[1],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[2]-a.start[2])+a.start[2],10),255),0)+")"}});var i={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],
darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],
maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},j=["add","remove","toggle"],k={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};b.effects.animateClass=function(a,c,e,f){b.isFunction(e)&&(f=e,e=null);return this.queue(function(){var i=b(this),o=i.attr("style")||
" ",k=g(d.call(this)),r,u=i.attr("class");b.each(j,function(b,c){if(a[c])i[c+"Class"](a[c])});r=g(d.call(this));i.attr("class",u);i.animate(h(k,r),{queue:false,duration:c,easing:e,complete:function(){b.each(j,function(b,c){if(a[c])i[c+"Class"](a[c])});if(typeof i.attr("style")=="object"){i.attr("style").cssText="";i.attr("style").cssText=o}else i.attr("style",o);f&&f.apply(this,arguments);b.dequeue(this)}})})};b.fn.extend({_addClass:b.fn.addClass,addClass:function(a,c,d,e){return c?b.effects.animateClass.apply(this,
[{add:a},c,d,e]):this._addClass(a)},_removeClass:b.fn.removeClass,removeClass:function(a,c,d,e){return c?b.effects.animateClass.apply(this,[{remove:a},c,d,e]):this._removeClass(a)},_toggleClass:b.fn.toggleClass,toggleClass:function(c,d,e,f,g){return"boolean"==typeof d||d===a?e?b.effects.animateClass.apply(this,[d?{add:c}:{remove:c},e,f,g]):this._toggleClass(c,d):b.effects.animateClass.apply(this,[{toggle:c},d,e,f])},switchClass:function(a,c,d,e,f){return b.effects.animateClass.apply(this,[{add:c,
remove:a},d,e,f])}});b.extend(b.effects,{version:"1.8.14",save:function(a,b){for(var c=0;c<b.length;c++)null!==b[c]&&a.data("ec.storage."+b[c],a[0].style[b[c]])},restore:function(a,b){for(var c=0;c<b.length;c++)null!==b[c]&&a.css(b[c],a.data("ec.storage."+b[c]))},setMode:function(a,b){"toggle"==b&&(b=a.is(":hidden")?"show":"hide");return b},getBaseline:function(a,b){var c,d;switch(a[0]){case "top":c=0;break;case "middle":c=0.5;break;case "bottom":c=1;break;default:c=a[0]/b.height}switch(a[1]){case "left":d=
0;break;case "center":d=0.5;break;case "right":d=1;break;default:d=a[1]/b.width}return{x:d,y:c}},createWrapper:function(a){if(a.parent().is(".ui-effects-wrapper"))return a.parent();var c={width:a.outerWidth(!0),height:a.outerHeight(!0),"float":a.css("float")},d=b("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});a.wrap(d);d=a.parent();"static"==a.css("position")?(d.css({position:"relative"}),a.css({position:"relative"})):
(b.extend(c,{position:a.css("position"),zIndex:a.css("z-index")}),b.each(["top","left","bottom","right"],function(b,d){c[d]=a.css(d);isNaN(parseInt(c[d],10))&&(c[d]="auto")}),a.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"}));return d.css(c).show()},removeWrapper:function(a){return a.parent().is(".ui-effects-wrapper")?a.parent().replaceWith(a):a},setTransition:function(a,c,d,e){e=e||{};b.each(c,function(b,c){unit=a.cssUnit(c);0<unit[0]&&(e[c]=unit[0]*d+unit[1])});return e}});b.fn.extend({effect:function(a,
c,d,f){var g=e.apply(this,arguments),h={options:g[1],duration:g[2],callback:g[3]},g=h.options.mode,i=b.effects[a];return b.fx.off||!i?g?this[g](h.duration,h.callback):this.each(function(){h.callback&&h.callback.call(this)}):i.call(this,h)},_show:b.fn.show,show:function(a){if(f(a))return this._show.apply(this,arguments);var b=e.apply(this,arguments);b[1].mode="show";return this.effect.apply(this,b)},_hide:b.fn.hide,hide:function(a){if(f(a))return this._hide.apply(this,arguments);var b=e.apply(this,
arguments);b[1].mode="hide";return this.effect.apply(this,b)},__toggle:b.fn.toggle,toggle:function(a){if(f(a)||"boolean"===typeof a||b.isFunction(a))return this.__toggle.apply(this,arguments);var c=e.apply(this,arguments);c[1].mode="toggle";return this.effect.apply(this,c)},cssUnit:function(a){var c=this.css(a),d=[];b.each(["em","px","%","pt"],function(a,b){0<c.indexOf(b)&&(d=[parseFloat(c),b])});return d}});b.easing.jswing=b.easing.swing;b.extend(b.easing,{def:"easeOutQuad",swing:function(a,c,d,
e,f){return b.easing[b.easing.def](a,c,d,e,f)},easeInQuad:function(a,b,c,d,e){return d*(b/=e)*b+c},easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c},easeInOutQuad:function(a,b,c,d,e){return 1>(b/=e/2)?d/2*b*b+c:-d/2*(--b*(b-2)-1)+c},easeInCubic:function(a,b,c,d,e){return d*(b/=e)*b*b+c},easeOutCubic:function(a,b,c,d,e){return d*((b=b/e-1)*b*b+1)+c},easeInOutCubic:function(a,b,c,d,e){return 1>(b/=e/2)?d/2*b*b*b+c:d/2*((b-=2)*b*b+2)+c},easeInQuart:function(a,b,c,d,e){return d*(b/=e)*b*b*b+c},
easeOutQuart:function(a,b,c,d,e){return-d*((b=b/e-1)*b*b*b-1)+c},easeInOutQuart:function(a,b,c,d,e){return 1>(b/=e/2)?d/2*b*b*b*b+c:-d/2*((b-=2)*b*b*b-2)+c},easeInQuint:function(a,b,c,d,e){return d*(b/=e)*b*b*b*b+c},easeOutQuint:function(a,b,c,d,e){return d*((b=b/e-1)*b*b*b*b+1)+c},easeInOutQuint:function(a,b,c,d,e){return 1>(b/=e/2)?d/2*b*b*b*b*b+c:d/2*((b-=2)*b*b*b*b+2)+c},easeInSine:function(a,b,c,d,e){return-d*Math.cos(b/e*(Math.PI/2))+d+c},easeOutSine:function(a,b,c,d,e){return d*Math.sin(b/
e*(Math.PI/2))+c},easeInOutSine:function(a,b,c,d,e){return-d/2*(Math.cos(Math.PI*b/e)-1)+c},easeInExpo:function(a,b,c,d,e){return 0==b?c:d*Math.pow(2,10*(b/e-1))+c},easeOutExpo:function(a,b,c,d,e){return b==e?c+d:d*(-Math.pow(2,-10*b/e)+1)+c},easeInOutExpo:function(a,b,c,d,e){return 0==b?c:b==e?c+d:1>(b/=e/2)?d/2*Math.pow(2,10*(b-1))+c:d/2*(-Math.pow(2,-10*--b)+2)+c},easeInCirc:function(a,b,c,d,e){return-d*(Math.sqrt(1-(b/=e)*b)-1)+c},easeOutCirc:function(a,b,c,d,e){return d*Math.sqrt(1-(b=b/e-1)*
b)+c},easeInOutCirc:function(a,b,c,d,e){return 1>(b/=e/2)?-d/2*(Math.sqrt(1-b*b)-1)+c:d/2*(Math.sqrt(1-(b-=2)*b)+1)+c},easeInElastic:function(a,b,c,d,e){var a=1.70158,f=0,g=d;if(0==b)return c;if(1==(b/=e))return c+d;f||(f=0.3*e);g<Math.abs(d)?(g=d,a=f/4):a=f/(2*Math.PI)*Math.asin(d/g);return-(g*Math.pow(2,10*(b-=1))*Math.sin((b*e-a)*2*Math.PI/f))+c},easeOutElastic:function(a,b,c,d,e){var a=1.70158,f=0,g=d;if(0==b)return c;if(1==(b/=e))return c+d;f||(f=0.3*e);g<Math.abs(d)?(g=d,a=f/4):a=f/(2*Math.PI)*
Math.asin(d/g);return g*Math.pow(2,-10*b)*Math.sin((b*e-a)*2*Math.PI/f)+d+c},easeInOutElastic:function(a,b,c,d,e){var a=1.70158,f=0,g=d;if(0==b)return c;if(2==(b/=e/2))return c+d;f||(f=e*0.3*1.5);g<Math.abs(d)?(g=d,a=f/4):a=f/(2*Math.PI)*Math.asin(d/g);return 1>b?-0.5*g*Math.pow(2,10*(b-=1))*Math.sin((b*e-a)*2*Math.PI/f)+c:0.5*g*Math.pow(2,-10*(b-=1))*Math.sin((b*e-a)*2*Math.PI/f)+d+c},easeInBack:function(b,c,d,e,f,g){g==a&&(g=1.70158);return e*(c/=f)*c*((g+1)*c-g)+d},easeOutBack:function(b,c,d,e,
f,g){g==a&&(g=1.70158);return e*((c=c/f-1)*c*((g+1)*c+g)+1)+d},easeInOutBack:function(b,c,d,e,f,g){g==a&&(g=1.70158);return 1>(c/=f/2)?e/2*c*c*(((g*=1.525)+1)*c-g)+d:e/2*((c-=2)*c*(((g*=1.525)+1)*c+g)+2)+d},easeInBounce:function(a,c,d,e,f){return e-b.easing.easeOutBounce(a,f-c,0,e,f)+d},easeOutBounce:function(a,b,c,d,e){return(b/=e)<1/2.75?d*7.5625*b*b+c:b<2/2.75?d*(7.5625*(b-=1.5/2.75)*b+0.75)+c:b<2.5/2.75?d*(7.5625*(b-=2.25/2.75)*b+0.9375)+c:d*(7.5625*(b-=2.625/2.75)*b+0.984375)+c},easeInOutBounce:function(a,
c,d,e,f){return c<f/2?0.5*b.easing.easeInBounce(a,2*c,0,e,f)+d:0.5*b.easing.easeOutBounce(a,2*c-f,0,e,f)+0.5*e+d}})}(jQuery);
(function(b){b.effects.blind=function(a){return this.queue(function(){var c=b(this),d=["position","top","bottom","left","right"],g=b.effects.setMode(c,a.options.mode||"hide"),h=a.options.direction||"vertical";b.effects.save(c,d);c.show();var e=b.effects.createWrapper(c).css({overflow:"hidden"}),f="vertical"==h?"height":"width",h="vertical"==h?e.height():e.width();"show"==g&&e.css(f,0);var i={};i[f]="show"==g?h:0;e.animate(i,a.duration,a.options.easing,function(){"hide"==g&&c.hide();b.effects.restore(c,
d);b.effects.removeWrapper(c);a.callback&&a.callback.apply(c[0],arguments);c.dequeue()})})}})(jQuery);
(function(b){b.effects.bounce=function(a){return this.queue(function(){var c=b(this),d=["position","top","bottom","left","right"],g=b.effects.setMode(c,a.options.mode||"effect"),h=a.options.direction||"up",e=a.options.distance||20,f=a.options.times||5,i=a.duration||250;/show|hide/.test(g)&&d.push("opacity");b.effects.save(c,d);c.show();b.effects.createWrapper(c);var j="up"==h||"down"==h?"top":"left",h="up"==h||"left"==h?"pos":"neg",e=a.options.distance||("top"==j?c.outerHeight({margin:!0})/3:c.outerWidth({margin:!0})/
3);"show"==g&&c.css("opacity",0).css(j,"pos"==h?-e:e);"hide"==g&&(e/=2*f);"hide"!=g&&f--;if("show"==g){var k={opacity:1};k[j]=("pos"==h?"+=":"-=")+e;c.animate(k,i/2,a.options.easing);e/=2;f--}for(k=0;k<f;k++){var l={},m={};l[j]=("pos"==h?"-=":"+=")+e;m[j]=("pos"==h?"+=":"-=")+e;c.animate(l,i/2,a.options.easing).animate(m,i/2,a.options.easing);e="hide"==g?2*e:e/2}"hide"==g?(k={opacity:0},k[j]=("pos"==h?"-=":"+=")+e,c.animate(k,i/2,a.options.easing,function(){c.hide();b.effects.restore(c,d);b.effects.removeWrapper(c);
a.callback&&a.callback.apply(this,arguments)})):(l={},m={},l[j]=("pos"==h?"-=":"+=")+e,m[j]=("pos"==h?"+=":"-=")+e,c.animate(l,i/2,a.options.easing).animate(m,i/2,a.options.easing,function(){b.effects.restore(c,d);b.effects.removeWrapper(c);a.callback&&a.callback.apply(this,arguments)}));c.queue("fx",function(){c.dequeue()});c.dequeue()})}})(jQuery);
(function(b){b.effects.clip=function(a){return this.queue(function(){var c=b(this),d="position top bottom left right height width".split(" "),g=b.effects.setMode(c,a.options.mode||"hide"),h=a.options.direction||"vertical";b.effects.save(c,d);c.show();var e=b.effects.createWrapper(c).css({overflow:"hidden"}),e="IMG"==c[0].tagName?e:c,f="vertical"==h?"height":"width",i="vertical"==h?"top":"left",h="vertical"==h?e.height():e.width();"show"==g&&(e.css(f,0),e.css(i,h/2));var j={};j[f]="show"==g?h:0;j[i]=
"show"==g?0:h/2;e.animate(j,{queue:!1,duration:a.duration,easing:a.options.easing,complete:function(){g=="hide"&&c.hide();b.effects.restore(c,d);b.effects.removeWrapper(c);a.callback&&a.callback.apply(c[0],arguments);c.dequeue()}})})}})(jQuery);
(function(b){b.effects.drop=function(a){return this.queue(function(){var c=b(this),d="position top bottom left right opacity".split(" "),g=b.effects.setMode(c,a.options.mode||"hide"),h=a.options.direction||"left";b.effects.save(c,d);c.show();b.effects.createWrapper(c);var e="up"==h||"down"==h?"top":"left",h="up"==h||"left"==h?"pos":"neg",f=a.options.distance||("top"==e?c.outerHeight({margin:!0})/2:c.outerWidth({margin:!0})/2);"show"==g&&c.css("opacity",0).css(e,"pos"==h?-f:f);var i={opacity:"show"==
g?1:0};i[e]=("show"==g?"pos"==h?"+=":"-=":"pos"==h?"-=":"+=")+f;c.animate(i,{queue:!1,duration:a.duration,easing:a.options.easing,complete:function(){"hide"==g&&c.hide();b.effects.restore(c,d);b.effects.removeWrapper(c);a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
(function(b){b.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode="toggle"==a.options.mode?b(this).is(":visible")?"hide":"show":a.options.mode;var g=b(this).show().css("visibility","hidden"),h=g.offset();h.top-=parseInt(g.css("marginTop"),10)||0;h.left-=parseInt(g.css("marginLeft"),10)||0;for(var e=g.outerWidth(!0),f=g.outerHeight(!0),i=0;i<c;i++)for(var j=
0;j<d;j++)g.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-j*(e/d),top:-i*(f/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:e/d,height:f/c,left:h.left+j*(e/d)+("show"==a.options.mode?(j-Math.floor(d/2))*(e/d):0),top:h.top+i*(f/c)+("show"==a.options.mode?(i-Math.floor(c/2))*(f/c):0),opacity:"show"==a.options.mode?0:1}).animate({left:h.left+j*(e/d)+("show"==a.options.mode?0:(j-Math.floor(d/2))*(e/d)),top:h.top+
i*(f/c)+("show"==a.options.mode?0:(i-Math.floor(c/2))*(f/c)),opacity:"show"==a.options.mode?1:0},a.duration||500);setTimeout(function(){"show"==a.options.mode?g.css({visibility:"visible"}):g.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(g[0]);g.dequeue();b("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery);
(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:!1,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
(function(b){b.effects.fold=function(a){return this.queue(function(){var c=b(this),d=["position","top","bottom","left","right"],g=b.effects.setMode(c,a.options.mode||"hide"),h=a.options.size||15,e=!!a.options.horizFirst,f=a.duration?a.duration/2:b.fx.speeds._default/2;b.effects.save(c,d);c.show();var i=b.effects.createWrapper(c).css({overflow:"hidden"}),j="show"==g!=e,k=j?["width","height"]:["height","width"],j=j?[i.width(),i.height()]:[i.height(),i.width()],l=/([0-9]+)%/.exec(h);l&&(h=parseInt(l[1],
10)/100*j["hide"==g?0:1]);"show"==g&&i.css(e?{height:0,width:h}:{height:h,width:0});e={};l={};e[k[0]]="show"==g?j[0]:h;l[k[1]]="show"==g?j[1]:0;i.animate(e,f,a.options.easing).animate(l,f,a.options.easing,function(){"hide"==g&&c.hide();b.effects.restore(c,d);b.effects.removeWrapper(c);a.callback&&a.callback.apply(c[0],arguments);c.dequeue()})})}})(jQuery);
(function(b){b.effects.highlight=function(a){return this.queue(function(){var c=b(this),d=["backgroundImage","backgroundColor","opacity"],g=b.effects.setMode(c,a.options.mode||"show"),h={backgroundColor:c.css("backgroundColor")};"hide"==g&&(h.opacity=0);b.effects.save(c,d);c.show().css({backgroundImage:"none",backgroundColor:a.options.color||"#ffff99"}).animate(h,{queue:!1,duration:a.duration,easing:a.options.easing,complete:function(){g=="hide"&&c.hide();b.effects.restore(c,d);g=="show"&&!b.support.opacity&&
this.style.removeAttribute("filter");a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
(function(b){b.effects.pulsate=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"show");times=2*(a.options.times||5)-1;duration=a.duration?a.duration/2:b.fx.speeds._default/2;isVisible=c.is(":visible");animateTo=0;isVisible||(c.css("opacity",0).show(),animateTo=1);("hide"==d&&isVisible||"show"==d&&!isVisible)&&times--;for(d=0;d<times;d++)c.animate({opacity:animateTo},duration,a.options.easing),animateTo=(animateTo+1)%2;c.animate({opacity:animateTo},duration,
a.options.easing,function(){animateTo==0&&c.hide();a.callback&&a.callback.apply(this,arguments)});c.queue("fx",function(){c.dequeue()}).dequeue()})}})(jQuery);
(function(b){b.effects.puff=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide"),g=parseInt(a.options.percent,10)||150,h=g/100,e={height:c.height(),width:c.width()};b.extend(a.options,{fade:!0,mode:d,percent:"hide"==d?g:100,from:"hide"==d?e:{height:e.height*h,width:e.width*h}});c.effect("scale",a.options,a.duration,a.callback);c.dequeue()})};b.effects.scale=function(a){return this.queue(function(){var c=b(this),d=b.extend(!0,{},a.options),g=b.effects.setMode(c,
a.options.mode||"effect"),h=parseInt(a.options.percent,10)||(0==parseInt(a.options.percent,10)?0:"hide"==g?0:100),e=a.options.direction||"both",f=a.options.origin;"effect"!=g&&(d.origin=f||["middle","center"],d.restore=!0);f={height:c.height(),width:c.width()};c.from=a.options.from||("show"==g?{height:0,width:0}:f);c.to={height:f.height*("horizontal"!=e?h/100:1),width:f.width*("vertical"!=e?h/100:1)};if(a.options.fade&&("show"==g&&(c.from.opacity=0,c.to.opacity=1),"hide"==g))c.from.opacity=1,c.to.opacity=
0;d.from=c.from;d.to=c.to;d.mode=g;c.effect("size",d,a.duration,a.callback);c.dequeue()})};b.effects.size=function(a){return this.queue(function(){var c=b(this),d="position top bottom left right width height overflow opacity".split(" "),g="position top bottom left right overflow opacity".split(" "),h=["width","height","overflow"],e=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],i=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],j=b.effects.setMode(c,
a.options.mode||"effect"),k=a.options.restore||!1,l=a.options.scale||"both",m=a.options.origin,p={height:c.height(),width:c.width()};c.from=a.options.from||p;c.to=a.options.to||p;m&&(m=b.effects.getBaseline(m,p),c.from.top=(p.height-c.from.height)*m.y,c.from.left=(p.width-c.from.width)*m.x,c.to.top=(p.height-c.to.height)*m.y,c.to.left=(p.width-c.to.width)*m.x);var n=c.from.height/p.height,q=c.from.width/p.width,o=c.to.height/p.height,w=c.to.width/p.width;if("box"==l||"both"==l)if(n!=o&&(d=d.concat(f),
c.from=b.effects.setTransition(c,f,n,c.from),c.to=b.effects.setTransition(c,f,o,c.to)),q!=w)d=d.concat(i),c.from=b.effects.setTransition(c,i,q,c.from),c.to=b.effects.setTransition(c,i,w,c.to);if(("content"==l||"both"==l)&&n!=o)d=d.concat(e),c.from=b.effects.setTransition(c,e,n,c.from),c.to=b.effects.setTransition(c,e,o,c.to);b.effects.save(c,k?d:g);c.show();b.effects.createWrapper(c);c.css("overflow","hidden").css(c.from);if("content"==l||"both"==l)f=f.concat(["marginTop","marginBottom"]).concat(e),
i=i.concat(["marginLeft","marginRight"]),h=d.concat(f).concat(i),c.find("*[width]").each(function(){child=b(this);k&&b.effects.save(child,h);var c=child.height(),d=child.width();child.from={height:c*n,width:d*q};child.to={height:c*o,width:d*w};if(n!=o){child.from=b.effects.setTransition(child,f,n,child.from);child.to=b.effects.setTransition(child,f,o,child.to)}if(q!=w){child.from=b.effects.setTransition(child,i,q,child.from);child.to=b.effects.setTransition(child,i,w,child.to)}child.css(child.from);
child.animate(child.to,a.duration,a.options.easing,function(){k&&b.effects.restore(child,h)})});c.animate(c.to,{queue:!1,duration:a.duration,easing:a.options.easing,complete:function(){c.to.opacity===0&&c.css("opacity",c.from.opacity);j=="hide"&&c.hide();b.effects.restore(c,k?d:g);b.effects.removeWrapper(c);a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
(function(b){b.effects.shake=function(a){return this.queue(function(){var c=b(this),d=["position","top","bottom","left","right"];b.effects.setMode(c,a.options.mode||"effect");var g=a.options.direction||"left",h=a.options.distance||20,e=a.options.times||3,f=a.duration||a.options.duration||140;b.effects.save(c,d);c.show();b.effects.createWrapper(c);var i="up"==g||"down"==g?"top":"left",j="up"==g||"left"==g?"pos":"neg",g={},k={},l={};g[i]=("pos"==j?"-=":"+=")+h;k[i]=("pos"==j?"+=":"-=")+2*h;l[i]=("pos"==
j?"-=":"+=")+2*h;c.animate(g,f,a.options.easing);for(h=1;h<e;h++)c.animate(k,f,a.options.easing).animate(l,f,a.options.easing);c.animate(k,f,a.options.easing).animate(g,f/2,a.options.easing,function(){b.effects.restore(c,d);b.effects.removeWrapper(c);a.callback&&a.callback.apply(this,arguments)});c.queue("fx",function(){c.dequeue()});c.dequeue()})}})(jQuery);
(function(b){b.effects.slide=function(a){return this.queue(function(){var c=b(this),d=["position","top","bottom","left","right"],g=b.effects.setMode(c,a.options.mode||"show"),h=a.options.direction||"left";b.effects.save(c,d);c.show();b.effects.createWrapper(c).css({overflow:"hidden"});var e="up"==h||"down"==h?"top":"left",h="up"==h||"left"==h?"pos":"neg",f=a.options.distance||("top"==e?c.outerHeight({margin:!0}):c.outerWidth({margin:!0}));"show"==g&&c.css(e,"pos"==h?isNaN(f)?"-"+f:-f:f);var i={};
i[e]=("show"==g?"pos"==h?"+=":"-=":"pos"==h?"-=":"+=")+f;c.animate(i,{queue:!1,duration:a.duration,easing:a.options.easing,complete:function(){"hide"==g&&c.hide();b.effects.restore(c,d);b.effects.removeWrapper(c);a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
(function(b){b.effects.transfer=function(a){return this.queue(function(){var c=b(this),d=b(a.options.to),g=d.offset(),d={top:g.top,left:g.left,height:d.innerHeight(),width:d.innerWidth()},g=c.offset(),h=b('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(a.options.className).css({top:g.top,left:g.left,height:c.innerHeight(),width:c.innerWidth(),position:"absolute"}).animate(d,a.duration,a.options.easing,function(){h.remove();a.callback&&a.callback.apply(c[0],arguments);c.dequeue()})})}})(jQuery);
/*
* jQuery Highlight plugin
* Based on highlight v3 by Johann Burkard
* http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html
* Copyright (c) 2009 Bartek Szopka http://bartaz.github.com/sandbox.js/jquery.highlight.html
* Licensed under MIT license.
*/
jQuery.extend({highlight:function(a,c,b,e){if(a.nodeType===3){if(c=a.data.match(c)){b=document.createElement(b||"span");b.className=e||"highlight";a=a.splitText(c.index);a.splitText(c[0].length);e=a.cloneNode(true);b.appendChild(e);a.parentNode.replaceChild(b,a);return 1}}else if(a.nodeType===1&&a.childNodes&&!/(script|style)/i.test(a.tagName)&&!(a.tagName===b.toUpperCase()&&a.className===e))for(var d=0;d<a.childNodes.length;d++)d+=jQuery.highlight(a.childNodes[d],c,b,e);return 0}});
jQuery.fn.unhighlight=function(a){var c={className:"highlight",element:"span"};jQuery.extend(c,a);return this.find(c.element+"."+c.className).each(function(){var b=this.parentNode;b.replaceChild(this.firstChild,this);b.normalize()}).end()};
jQuery.fn.highlight=function(a,c){var b={className:"highlight",element:"span",caseSensitive:false,wordsOnly:false};jQuery.extend(b,c);if(a.constructor===String)a=[a];a=jQuery.grep(a,function(f){return f!=""});if(a.length==0)return this;var e=b.caseSensitive?"":"i",d="("+a.join("|")+")";if(b.wordsOnly)d="\\b"+d+"\\b";var g=RegExp(d,e);return this.each(function(){jQuery.highlight(this,g,b.element,b.className)})};

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 182 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

View file

@ -1,398 +0,0 @@
/*
* jQuery UI CSS Framework
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
*/
/* Layout helpers
----------------------------------*/
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
.ui-helper-clearfix { display: inline-block; }
/* required comment for clearfix to work in Opera \*/
* html .ui-helper-clearfix { height:1%; }
.ui-helper-clearfix { display:block; }
/* end clearfix */
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
/* Interaction Cues
----------------------------------*/
.ui-state-disabled { cursor: default !important; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
/* Misc visuals
----------------------------------*/
/* Overlays */
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
/*
* jQuery UI CSS Framework
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande,%20Lucida%20Sans,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=5c9ccc&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=55&borderColorHeader=4297d7&fcHeader=ffffff&iconColorHeader=d8e7f3&bgColorContent=fcfdfd&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=a6c9e2&fcContent=222222&iconColorContent=469bdd&bgColorDefault=dfeffc&bgTextureDefault=02_glass.png&bgImgOpacityDefault=85&borderColorDefault=c5dbec&fcDefault=2e6e9e&iconColorDefault=6da8d5&bgColorHover=d0e5f5&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=79b7e7&fcHover=1d5987&iconColorHover=217bc0&bgColorActive=f5f8f9&bgTextureActive=06_inset_hard.png&bgImgOpacityActive=100&borderColorActive=79b7e7&fcActive=e17009&iconColorActive=f9bd01&bgColorHighlight=fbec88&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=fad42e&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
*/
/* Component containers
----------------------------------*/
.ui-widget { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1.1em; }
.ui-widget .ui-widget { font-size: 1em; }
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1em; }
.ui-widget-content { border: 1px solid #a6c9e2; background: #fcfdfd url(images/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x; color: #222222; }
.ui-widget-content a { color: #222222; }
.ui-widget-header { border: 1px solid #4297d7; background: #5c9ccc url(images/ui-bg_gloss-wave_55_5c9ccc_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
.ui-widget-header a { color: #ffffff; }
/* Interaction states
----------------------------------*/
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #c5dbec; background: #dfeffc url(images/ui-bg_glass_85_dfeffc_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #2e6e9e; }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #2e6e9e; text-decoration: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #79b7e7; background: #d0e5f5 url(images/ui-bg_glass_75_d0e5f5_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1d5987; }
.ui-state-hover a, .ui-state-hover a:hover { color: #1d5987; text-decoration: none; }
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #79b7e7; background: #f5f8f9 url(images/ui-bg_inset-hard_100_f5f8f9_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #e17009; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #e17009; text-decoration: none; }
.ui-widget :active { outline: none; }
/* Interaction Cues
----------------------------------*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fad42e; background: #fbec88 url(images/ui-bg_flat_55_fbec88_40x100.png) 50% 50% repeat-x; color: #363636; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_469bdd_256x240.png); }
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_469bdd_256x240.png); }
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_d8e7f3_256x240.png); }
.ui-state-default .ui-icon { background-image: url(images/ui-icons_6da8d5_256x240.png); }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_217bc0_256x240.png); }
.ui-state-active .ui-icon {background-image: url(images/ui-icons_f9bd01_256x240.png); }
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
/* positioning */
.ui-icon-carat-1-n { background-position: 0 0; }
.ui-icon-carat-1-ne { background-position: -16px 0; }
.ui-icon-carat-1-e { background-position: -32px 0; }
.ui-icon-carat-1-se { background-position: -48px 0; }
.ui-icon-carat-1-s { background-position: -64px 0; }
.ui-icon-carat-1-sw { background-position: -80px 0; }
.ui-icon-carat-1-w { background-position: -96px 0; }
.ui-icon-carat-1-nw { background-position: -112px 0; }
.ui-icon-carat-2-n-s { background-position: -128px 0; }
.ui-icon-carat-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -64px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -64px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-off { background-position: -96px -144px; }
.ui-icon-radio-on { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
/* Misc visuals
----------------------------------*/
/* Corner radius */
.ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; }
.ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; }
.ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; }
.ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
.ui-corner-top { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; }
.ui-corner-bottom { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
.ui-corner-right { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
.ui-corner-left { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; }
.ui-corner-all { -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }
/* Overlays */
.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* Resizable
----------------------------------*/
.ui-resizable { position: relative;}
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Selectable
----------------------------------*/
.ui-selectable-helper { border:1px dotted black }
/* Autocomplete
----------------------------------*/
.ui-autocomplete { position: absolute; cursor: default; }
.ui-autocomplete-loading { background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat; }
/* workarounds */
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
/* Menu
----------------------------------*/
.ui-menu {
list-style:none;
padding: 2px;
margin: 0;
display:block;
}
.ui-menu .ui-menu {
margin-top: -3px;
}
.ui-menu .ui-menu-item {
margin:0;
padding: 0;
zoom: 1;
float: left;
clear: left;
width: 100%;
}
.ui-menu .ui-menu-item a {
text-decoration:none;
display:block;
padding:.2em .4em;
line-height:1.5;
zoom:1;
}
.ui-menu .ui-menu-item a.ui-state-hover,
.ui-menu .ui-menu-item a.ui-state-active {
font-weight: normal;
margin: -1px;
}
/* Button
----------------------------------*/
.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
.ui-button-icons-only { width: 3.4em; }
button.ui-button-icons-only { width: 3.7em; }
/*button text element */
.ui-button .ui-button-text { display: block; line-height: 1.4; }
.ui-button-text-only .ui-button-text { padding: .4em 1em; }
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
.ui-button-text-icon .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
/* no icon support for input elements, provide padding by default */
input.ui-button { padding: .4em 1em; }
/*button icon element(s) */
.ui-button-icon-only .ui-icon, .ui-button-text-icon .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
.ui-button-text-icon .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
/*button sets*/
.ui-buttonset { margin-right: 7px; }
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
/* workarounds */
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
/* Dialog
----------------------------------*/
.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; }
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; }
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
/* Tabs
----------------------------------*/
.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
.ui-tabs .ui-tabs-hide { display: none !important; }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,008 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 631 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 631 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 807 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -1,85 +0,0 @@
.treeview, .treeview ul {
padding: 0;
margin: 0;
list-style: none;
}
.treeview ul {
background-color: white;
margin-top: 4px;
}
.treeview .hitarea {
background: url(images/treeview-default.gif) -64px -25px no-repeat;
height: 16px;
width: 16px;
margin-left: -16px;
float: left;
cursor: pointer;
}
/* fix for IE6 */
* html .hitarea {
display: inline;
float:none;
}
.treeview li {
margin: 0;
padding: 3px 0 3px 16px;
}
.treeview a.selected {
background-color: #eee;
}
#treecontrol { margin: 1em 0; display: none; }
.treeview .hover { color: red; cursor: pointer; }
.treeview li { background: url(images/treeview-default-line.gif) 0 0 no-repeat; }
.treeview li.collapsable, .treeview li.expandable { background-position: 0 -176px; }
.treeview .expandable-hitarea { background-position: -80px -3px; }
.treeview li.last { background-position: 0 -1766px }
.treeview li.lastCollapsable, .treeview li.lastExpandable { background-image: url(images/treeview-default.gif); }
.treeview li.lastCollapsable { background-position: 0 -111px }
.treeview li.lastExpandable { background-position: -32px -67px }
.treeview div.lastCollapsable-hitarea, .treeview div.lastExpandable-hitarea { background-position: 0; }
.treeview-red li { background-image: url(images/treeview-red-line.gif); }
.treeview-red .hitarea, .treeview-red li.lastCollapsable, .treeview-red li.lastExpandable { background-image: url(images/treeview-red.gif); }
.treeview-black li { background-image: url(images/treeview-black-line.gif); }
.treeview-black .hitarea, .treeview-black li.lastCollapsable, .treeview-black li.lastExpandable { background-image: url(images/treeview-black.gif); }
.treeview-gray li { background-image: url(images/treeview-gray-line.gif); }
.treeview-gray .hitarea, .treeview-gray li.lastCollapsable, .treeview-gray li.lastExpandable { background-image: url(images/treeview-gray.gif); }
.treeview-famfamfam li { background-image: url(images/treeview-famfamfam-line.gif); }
.treeview-famfamfam .hitarea, .treeview-famfamfam li.lastCollapsable, .treeview-famfamfam li.lastExpandable { background-image: url(images/treeview-famfamfam.gif); }
.filetree li { padding: 3px 0 2px 16px; }
.filetree span.folder, .filetree span.file { padding: 1px 0 1px 16px; display: block; }
.filetree span.folder { background: url(images/folder.gif) 0 0 no-repeat; }
.filetree li.expandable span.folder { background: url(images/folder-closed.gif) 0 0 no-repeat; }
.filetree span.file { background: url(images/file.gif) 0 0 no-repeat; }
html, body {height:100%; margin: 0; padding: 0; }
/*
html>body {
font-size: 16px;
font-size: 68.75%;
} Reset Base Font Size */
/*
body {
font-family: Verdana, helvetica, arial, sans-serif;
font-size: 68.75%;
background: #fff;
color: #333;
} */
a img { border: none; }

File diff suppressed because one or more lines are too long

View file

@ -1,282 +0,0 @@
/**
* Miscellaneous js functions for WebHelp
* Kasun Gajasinghe, http://kasunbg.blogspot.com
* David Cramer, http://www.thingbag.net
*
*/
//Turn ON and OFF the animations for Show/Hide Sidebar. Extend this to other anime as well if any.
var noAnimations=false;
$(document).ready(function() {
/* Local addition */
$("a").filter(function() {
return this.hostname && this.hostname !== location.hostname;
}).addClass('external');
// When you click on a link to an anchor, scroll down
// 105 px to cope with the fact that the banner
// hides the top 95px or so of the page.
// This code deals with the problem when
// you click on a link within a page.
$('a[href*=#]').click(function() {
if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'')
&& location.hostname == this.hostname) {
var $target = $(this.hash);
$target = $target.length && $target
|| $('[name=' + this.hash.slice(1) +']');
if (!(this.hash == "#searchDiv" || this.hash == "#treeDiv" || this.hash == "") && $target.length) {
var targetOffset = $target.offset().top - 120;
$('html,body')
.animate({scrollTop: targetOffset}, 200);
return false;
}
}
});
// $("#showHideHighlight").button(); //add jquery button styling to 'Go' button
//Generate tabs in nav-pane with JQuery
$(function() {
$("#tabs").tabs({
cookie: {
expires: 2 // store cookie for 2 days.
}
});
});
//Generate the tree
$("#ulTreeDiv").attr("style", "");
$("#tree").treeview({
collapsed: true,
animated: "medium",
control: "#sidetreecontrol",
persist: "cookie"
});
//after toc fully styled, display it. Until loading, a 'loading' image will be displayed
$("#tocLoading").attr("style", "display:none;");
// $("#ulTreeDiv").attr("style","display:block;");
//.searchButton is the css class applied to 'Go' button
$(function() {
$("button", ".searchButton").button();
$("button", ".searchButton").click(function() {
return false;
});
});
//'ui-tabs-1' is the cookie name which is used for the persistence of the tabs.(Content/Search tab)
if ($.cookie('ui-tabs-1') === '1') { //search tab is active
if ($.cookie('textToSearch') != undefined && $.cookie('textToSearch').length > 0) {
document.getElementById('textToSearch').value = $.cookie('textToSearch');
Verifie('searchForm');
searchHighlight($.cookie('textToSearch'));
$("#showHideHighlight").css("display", "block");
}
}
syncToc(); //Synchronize the toc tree with the content pane, when loading the page.
//$("#doSearch").button(); //add jquery button styling to 'Go' button
// When you click on a link to an anchor, scroll down
// 120 px to cope with the fact that the banner
// hides the top 95px or so of the page.
// This code deals with the problem when
// you click on a link from another page.
var hash = window.location.hash;
if(hash){
var targetOffset = $(hash).offset().top - 120;
$('html,body').animate({scrollTop: targetOffset}, 200);
return false;
}
});
/**
* If an user moved to another page by clicking on a toc link, and then clicked on #searchDiv,
* search should be performed if the cookie textToSearch is not empty.
*/
function doSearch() {
//'ui-tabs-1' is the cookie name which is used for the persistence of the tabs.(Content/Search tab)
if ($.cookie('textToSearch') != undefined && $.cookie('textToSearch').length > 0) {
document.getElementById('textToSearch').value = $.cookie('textToSearch');
Verifie('searchForm');
}
}
/**
* Synchronize with the tableOfContents
*/
function syncToc() {
var a = document.getElementById("webhelp-currentid");
if (a != undefined) {
//Expanding the child sections of the selected node.
var nodeClass = a.getAttribute("class");
if (nodeClass != null && !nodeClass.match(/collapsable/)) {
a.setAttribute("class", "collapsable");
//remove display:none; css style from <ul> block in the selected node.
var ulNode = a.getElementsByTagName("ul")[0];
if (ulNode != undefined) {
if (ulNode.hasAttribute("style")) {
ulNode.setAttribute("style", "display: block; background-color: #D8D8D8 !important;");
} else {
var ulStyle = document.createAttribute("style");
ulStyle.nodeValue = "display: block; background-color: #D8D8D8 !important;";
ulNode.setAttributeNode(ulStyle);
} }
//adjust tree's + sign to -
var divNode = a.getElementsByTagName("div")[0];
if (divNode != undefined) {
if (divNode.hasAttribute("class")) {
divNode.setAttribute("class", "hitarea collapsable-hitarea");
} else {
var divClass = document.createAttribute("class");
divClass.nodeValue = "hitarea collapsable-hitarea";
divNode.setAttributeNode(divClass);
} }
//set persistence cookie when a node is auto expanded
// setCookieForExpandedNode("webhelp-currentid");
}
var b = a.getElementsByTagName("a")[0];
if (b != undefined) {
//Setting the background for selected node.
var style = a.getAttribute("style", 2);
if (style != null && !style.match(/background-color: Background;/)) {
a.setAttribute("style", "background-color: #D8D8D8; " + style);
b.setAttribute("style", "color: black;");
} else if (style != null) {
a.setAttribute("style", "background-color: #D8D8D8; " + style);
b.setAttribute("style", "color: black;");
} else {
a.setAttribute("style", "background-color: #D8D8D8; ");
b.setAttribute("style", "color: black;");
}
}
//shows the node related to current content.
//goes a recursive call from current node to ancestor nodes, displaying all of them.
while (a.parentNode && a.parentNode.nodeName) {
var parentNode = a.parentNode;
var nodeName = parentNode.nodeName;
if (nodeName.toLowerCase() == "ul") {
parentNode.setAttribute("style", "display: block;");
} else if (nodeName.toLocaleLowerCase() == "li") {
parentNode.setAttribute("class", "collapsable");
parentNode.firstChild.setAttribute("class", "hitarea collapsable-hitarea ");
}
a = parentNode;
} } }
/*
function setCookieForExpandedNode(nodeName) {
var tocDiv = document.getElementById("tree"); //get table of contents Div
var divs = tocDiv.getElementsByTagName("div");
var matchedDivNumber;
var i;
for (i = 0; i < divs.length; i++) { //1101001
var div = divs[i];
var liNode = div.parentNode;
}
//create a new cookie if a treeview does not exist
if ($.cookie(treeCookieId) == null || $.cookie(treeCookieId) == "") {
var branches = $("#tree").find("li");//.prepareBranches(treesettings);
var data = [];
branches.each(function(i, e) {
data[i] = $(e).is(":has(>ul:visible)") ? 1 : 0;
});
$.cookie(treeCookieId, data.join(""));
}
if (i < divs.length) {
var treeviewCookie = $.cookie(treeCookieId);
var tvCookie1 = treeviewCookie.substring(0, i);
var tvCookie2 = treeviewCookie.substring(i + 1);
var newTVCookie = tvCookie1 + "1" + tvCookie2;
$.cookie(treeCookieId, newTVCookie);
}
} */
/**
* Code for Show/Hide TOC
*
*/
function showHideToc() {
var showHideButton = $("#showHideButton");
var leftNavigation = $("#sidebar"); //hide the parent div of leftnavigation, ie sidebar
var content = $("#content");
var animeTime=75
if (showHideButton != undefined && showHideButton.hasClass("pointLeft")) {
//Hide TOC
showHideButton.removeClass('pointLeft').addClass('pointRight');
if(noAnimations) {
leftNavigation.css("display", "none");
content.css("margin", "125px 0 0 0");
} else {
leftNavigation.hide(animeTime);
content.animate( { "margin-left": 0 }, animeTime);
}
showHideButton.attr("title", "Show Sidebar");
} else {
//Show the TOC
showHideButton.removeClass('pointRight').addClass('pointLeft');
if(noAnimations) {
content.css("margin", "125px 0 0 280px");
leftNavigation.css("display", "block");
} else {
content.animate( { "margin-left": '280px' }, animeTime);
leftNavigation.show(animeTime);
}
showHideButton.attr("title", "Hide Sidebar");
}
}
/**
* Code for search highlighting
*/
var highlightOn = true;
function searchHighlight(searchText) {
highlightOn = true;
if (searchText != undefined) {
var wList;
var sList = new Array(); //stem list
//Highlight the search terms
searchText = searchText.toLowerCase().replace(/<\//g, "_st_").replace(/\$_/g, "_di_").replace(/\.|%2C|%3B|%21|%3A|@|\/|\*/g, " ").replace(/(%20)+/g, " ").replace(/_st_/g, "</").replace(/_di_/g, "%24_")
searchText = searchText.replace(/ +/g, " ");
searchText = searchText.replace(/ $/, "").replace(/^ /, "");
wList = searchText.split(" ");
$("#content").highlight(wList); //Highlight the search input
if (typeof stemmer != "undefined") {
//Highlight the stems
for (var i = 0; i < wList.length; i++) {
var stemW = stemmer(wList[i]);
sList.push(stemW);
}
} else {
sList = wList;
}
$("#content").highlight(sList); //Highlight the search input's all stems
}
}
function searchUnhighlight() {
highlightOn = false;
//unhighlight the search input's all stems
$("#content").unhighlight();
$("#content").unhighlight();
}
function toggleHighlight() {
if (highlightOn) {
searchUnhighlight();
} else {
searchHighlight($.cookie('textToSearch'));
}
}

View file

@ -1,40 +0,0 @@
var myLayout;
jQuery(document).ready(function ($) {
myLayout = $('body').layout({
//Defining panes
west__paneSelector: "#sidebar"
, north__paneSelector: "#header"
, center__paneSelector: "#content"
// some resizing/toggling settings
, north__resizable: false // OVERRIDE the pane-default of 'resizable=true'
, north__spacing_open: 0 // no resizer-bar when open (zero height)
, west__slideable: false
, west__spacing_closed: 6
, west__spacing_open: 4
,
// some pane-size settings
west__minSize: 280
, north__minSize: 99
// some pane animation settings
, west__animatePaneSizing: false
, west__fxSpeed_size: "normal"
, west__fxSpeed_open: 10
, west__fxSettings_open: {easing: ""}
, west__fxName_close: "none"
, stateManagement__enabled: true // automatic cookie load & save enabled by default
, stateManagement__cookie__name: "sidebar_state"
});
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show more