Dynamic C 10.72A Installer Released

Started by "Tom...@tomlogic.com [rabbit-semi]" April 1, 2016
Just wanted to let you all know that Digi released an updated Dynamic C installer (version 10.72A) yesterday.

You can download it from the Dynamic C 10 Product Page.

I've pasted the release notes below, for a detailed list of what's changed. Please let me know if you have any questions about the changes, or if you run into any problems using the updated version.

If you're using the GitHub repository, I've tagged the commit corresponding to this release as "10.72A".

VERSION 10.72A - March 17, 2016

The big change for this release is that Dynamic C is now an Open
Source project on GitHub (https://github.com/digidotcom/DCRabbit_10).
It includes source code to the previously-encrypted Wi-Fi and SSL
libraries, and the license was changed to MPL 2.0 (Libraries) and
ISC (Samples).

This release was made as 10.72A since it does not include changes to
the compiler and only contains modified libraries, samples and
documentation. It uses shortcuts (.lnk files) to launch the compiler
with a command-line parameter of "-c A", forcing the compiler to
identify itself as 10.72A and use registry entries for version 10.72A.

The installer is also smaller, due to the removal of an outdated XCTU
installer, the "XBee GPIO GUI" utility/source (designed for sample
programs removed in the 10.70 release), and a Microsoft .NET installer
(dotnetfx.exe) required by that utility.

You can download the latest version of X-CTU from:


- Includes library and utility programs to write a System ID Block
to a device's flash (Utilities/Write_ID).

- Incorporates NAND flash library patch (40002851_A, 2012-12-01) for
Micron/Numonyx/ST NAND256W3A (32MB) devices used in new hardware.

- Incorporates Serial Flash update (40002882_A) for revision E of
45DB641 chips used in new hardware.

- Add httpc_set_extra_headers() API to HTTPC.LIB for user code to
add headers to outbound requests.

- Upgrades TLS (Transport Layer Security, aka SSL/HTTPS)
implementation from 1.0 to 1.2.
- Is compatible with modern web browsers.
- Removes support for insecure SSLv2, SSLv3 and TLS 1.0 protocols.
- Removes support for insecure RC4 cipher and MD5 digest.
- Automatically enables required AES128_CBC cipher.
- Defaults to 2048-bit RSA keys (previously 1024-bit).
- Adds optional AES256_CBC cipher, SHA256 digests, and support for
SHA256 signatures in X.509 (TLS/SSL) certificates.


- Fix conversion of RabbitWeb multi-select 32-bit enum to text.
(contributed by titobrasolin).
- Initialize struct tm in _atodt() before use to avoid random
hour/minute/second values affecting result (contributed by
- Fix return value of asix_ioctl() for unsupported features. Was
previously returning uninitialized value from stack instead of 0.
- DC-6: Fix rebalancing of HTTPS Rx and Tx transport buffers,
enabling HTTPS upload of large files.
- DC-10: Fix PPP baud rate calculations, corrects problem with
9600 baud.
- DC-19: ASIX PHY link-fail recovery now works after extended cable
disconnection (20 minutes or more).
- DC-27: Improved SPI.LIB's SPIWrRd() function's Rabbit 6000-specific
work around.
- DC-31: HTTP.LIB's zhtml_handler() function now correctly handles
HttpState (unsigned) extlen values greater than 32767.
- DC-55: Fixed multiple stacks (as when using e.g. uC/OS-II
multi-tasking) misplacement bug affecting Dynamic C versions 10.62
through 10.72, inclusive.
- DC-78: Fix memory leaks in idigi_put() and idigi_upload().
- DC-117: PPP.LIB's LCPsendEchoReply() now echoes the request's
non-zero length data.
- DC-129: Fix FTP_CLIENT uploading files smaller than TCP socket
buffer size.
- DC-130: SNMP: Correctly store zero-length octet strings and prevent
xmem window wraparound (in all data formats).
- DC-215: Fix keepalive handling in tcp.lib
- DC-200: Update some incorrect macro names (contributed by Richard
- DC-200: Update start of write buffer when adjusting TCP buffer split
between read/write. Possible fix for broken HTTPS Upload
(contributed by Richard Pletcher).
- DC-207: Correctly render SSI/RabbitWeb (shtml/zhtml) tags spanning
multiple 256-byte blocks in files on FAT filesystem.
- DC-217: Add full HDLC support for Rabbits 4000-6000, including
sample program.
- DC-220: Added test for non-zero length in tcp_write(), for
- DC-224: Fixed corruption of IX around _pb_free call in SERLINK.LIB.
- DC-235: Corrects an error where the HTTP server would fail to find
files on FAT filesystem due to stale data in SSpecFileUnion
structure allocated from a pool of memory.
- DC-241: Function sdspi_process_command() in SDFLASH.LIB wasn't
releasing the SPI semaphore (contributed by Mark Leichty).
- DC-248: Update HTTPS_CLIENT.c to follow URL redirects and correctly
print "far" hostname from httpc_Socket.
- GITHUB-1: Correct invalid strtol() and strtoul() behavior.
- GITHUB-2: Fix "%g" formatting error for floats smaller than 0.1.
- RCM-7: Don't reset TCP keepalive timer on reused connections.
- RCM-109: Fix issue preventing module from joining WPA mixed-mode
(TKIP/CCMP) networks.


- The DMAETH100_AUTO_NEG_TIMEOUT macro is deprecated. Rabbit 5000
or 6000 built-in Ethernet applications which use a custom
definition for this macro should instead define one or both of

The *LINKFAIL* macro value determines the PHY powered-up time
out for link-failed detection. The *LINKDOWN* macro value
determines the PHY powered-down idle time-out for no-connect
Ethernet current reduction. The default value for each of the
*LINK* macros is 4000 miliiseconds, which results in a 50%
powered-up vs. powered-down duty cycle when e.g. Ethernet is
not connected.
Is the value of command-line parameter "-c A" available at compile time?

E.g. to check for a very specific DC version:
#if CC_VER < 0xA72 || (something) != 'B'
#fatal "This library must be used with Dynamic C version 10.72B or later."

This sounds like a great feature request for the 10.72C release. As far as I can tell, that command-line parameter is only used to set the Registry key used for settings and for display in the title of the main IDE window.

Keep in mind that all of the releases I’m working on at the moment are limited to library updates, so the compiler version will stay at 10.72 for a while.

For the 10.72B release, I added a field to the embedded _firmware_info structure stored in the BIOS, but that isn’t visible in the compiler.

I should probably define it as a macro in one of the header files or libraries, and then use that macro in the BIOS. That programs and libraries can reference it as well. You can then use “!defined(NEW_MACRO_NAME)” to identify versions prior to 10.72C, and make comparisons on the value for later versions.

As a workaround, you’ll have to find some other macro that has changed for 10.72B (and later) and key off of that. Note that the end of a MAP file includes all macros defined in the project. You could do a diff on that to find newly defined macros for 10.72B. Unfortunately, there isn’t an easy way to see the value of all of those macros.

> On Feb 5, 2017, at 9:21 AM, t...@gmail.com [rabbit-semi] wrote:
> Is the value of command-line parameter "-c A" available at compile time?
> E.g. to check for a very specific DC version:
> #if CC_VER < 0xA72 || (something) != 'B'
> #fatal "This library must be used with Dynamic C version 10.72B or later."
> #endif
Nice workaround Tom.
I'm using ZSERVER.LIB in my project so SERVER_CLOUD should work:

#warnt "It looks like you are using Dynamic C 10.72B"