TSN.1 Compiler Release Notes


Release 5.4.7

Feature Enhancements

  • Added a new print setting to truncate bit field values according to their bit width
  • For Wireshark dissectors, arrays of enumerated bit fields or bit fields with non integer display extensions are no longer displayed in the dense array format
  • Field names are used as the default Wireshark field description

Bug Fixes

  • Message argument used in a size constraint was automatically initialized
  • Unbounded array check was too restrictive for a case of field with a size constraint

Release 5.4.6

Bug Fixes

  • Eliminated a gcc compile warning in the generated finalize function
  • The byte alignment was incorrectly calculated for a reserved block field

Release 5.4.5

Feature Enhancements

  • Named the enums for the various message configuration settings

Bug Fixes

  • For a bit field that appears in multiple branches of a conditional, the default value takes effect only when it is specified in the last branch of the conditional.

Release 5.4.4

Feature Enhancements

  • When multiple default values are specified for a bit field in different branches of a conditional, it is now reported as an error.

Bug Fixes

  • In the C++ message constructor, message arguments were initialized after the default intialization.
  • Custom initialization functions were not being invoked.

Release 5.4.3

Feature Enhancements

  • Print a message object to XML
  • Scan XML back into a message object
  • Added curly braces to the "flat" print format
  • Scan "flat" format data back into a message object

Release 5.4.2

Bug Fixes

  • When "-int64" options is used, bit fields with a size greater than 32-bit was using 32-bit integer types

Release 5.4.1

Feature Enhancements

  • Added a new "flat" print format for easier message manipluation in Python scripts

Bug Fixes

  • The generated packed structs are not packed tightly by GCC for bit fields whose types are not 32-bit integers.

Release 5.4

Feature Enhancements

  • The following new TSN.1 syntax are supported:
    • Binary integer literals
    • A new keyword "until" to more efficiently represent recursive constructs prevalent in 3GPP standards
    • Size constraint for a declaration block
  • Added the value-offset attribute to the display extension to adjust bit field values that are encoded at a fixed offset from their two's complement representation such as ASN.1 PER
  • Promoted the possibly duplicate field declaration check from a compile warning to a compile error. If appropriate, the error can be overriden by appending a '?' character after the field name.
  • Promoted the possibly undeclared field reference check from a compile warning to a compile error. If appropriate, the error can be overriden by appending a '?' character after the field name.

Bug Fixes

  • The pack and unpack functions continued on when an optional block was not present
  • The pack function did not check for buffer overflow for the null character of a string field

Release 5.3.3

Bug Fixes

  • Endianness configuration is not propagated to nested messages

Release 5.3.2

Bug Fixes

  • Array of bit fields in packed structs gives gcc compile errors

Release 5.3.1

Feature Enhancements

  • Added a message setting to configure the scan function to ignore unexpected fields in the input
  • Eliminated some GCC compile warings
  • Added packed struct support for GCC

Bug Fixes

  • Large values are not sign extended correctly in the wireshark target

Release 5.3

Feature Enhancements

  • Added the "-dynamic-endian" option to generate code that can process data in both big and little endian format
  • The "-O", "-O2", "-Ono-accpet", "-Opack", "-Ounpack", and "-Osizeof" options are obsolete.
  • The "-little" option is obsolete and replaced by "-little-endian".
  • The "-g" and "-O1" options are deprecated.
  • The "TSNC_STATUS_MISSING_DEBUG_INFO" error status code is obsolete.

Release 5.2.7

Feature Enhancements

  • Optimized the packing and unpacking of byte aligned arrays by using memcpy

Release 5.2.6

Bug Fixes

  • Operator "[]" is given wrong precedence.

Release 5.2.5

Feature Enhancements

  • Allowed the def attribute in the code extension for the wireshark target

Bug Fixes

  • Some little endian fields are packed and unpacked incorrectly

Release 5.2.4

Feature Enhancements

  • Changed the bit order for little endian to go from right (LSB) to left (MSB) within a byte
  • The "-Oinline" flag is obsolete.

Bug Fixes

  • Eliminated a Visual C++ compile warning for the wireshark target

Release 5.2.3

Bug Fixes

  • Invalid msg pointer value is passed to the custom print function for a top-level message.

Release 5.2.2

Feature Enhancements

  • Added 64-bit floating point type support

Bug Fixes

  • Some documentation tags are missing in the XML output.
  • Eliminated a Visual C++ compile warning for the wireshark target

Release 5.2.1

Bug Fixes

  • Used the "tsnc_uint32" type for all bit fields

Release 5.2

Feature Enhancements

  • Added the "-java" flag to generate Java code
  • Replaced the "-octets" flag with the more flexible "-byte-aligned" flag to optimize the performance for messages that start from a fixed byte boundary
  • Added the "-packed-struct" flag to generate C bit fields
  • Added the "-Omanual-init" flag to omit the generation of the initialize and finalize functions
  • Added an explicit check range interface to check for field value out of range
  • Changed the printing of signed integer fields in hex format to respect the size of the field
  • Added the "-clean" flag to remove the generated Java files

Bug Fixes

  • The Compiler crashes when the doxygen comment contains the "}" character
  • The memory allocator is not passed to the nested messages when "-static" flag is used
  • Added the extern "C" modifier to the generated C message descriptor declaration
  • The generated C++ code cause a Visual C++ 6.0 compile error when there is a recursion on inline nested message
  • The duplicate field check for arrays is incorrect
  • The range check for variable sized integer bit field is incorrect

Release 5.1

Feature Enhancements

  • The following new TSN.1 syntax are supported:
    • Error report code
  • Extended the dissect tag to add user defined pre and post dissect actions
  • Extended the dissect tag to replace the generated dissect code with user code
  • Generated additional XML elements to specify the condition under which a field is defined
  • Escaped the XML characters in the generated XML output

Bug Fixes

  • Added the extern "C" modifier back to the enum mapping functions
  • The pack/unpack behavior for a bit field marked with float type and little endianness is inconsistent between when the optimization flag is turned on and when it is off.

Release 5.0

Feature Enhancements

  • Added the "-xml" flag to generate XML code
  • When the size of a message or a case of field is constrained by a simple arithmetic expression such as "Length * 8" and the "Length" field is zero, the "Length" field will be set automatically by the sizeof function.
  • Made the generated Wireshark dissector code conform to the Wireshark coding standard
  • Added the "-check-range" flag to check field value range
  • Added the "-static-union" flag to use automatic storage for union members for the C target
  • Added the "-omit-msg-name" flag to omit nested message names from being displayed for the Wireshark target
  • Added the "-built-in" flag to add the "packet-" prefix to the generated filenames for the Wireshark target
  • The GUI control panel is obsolete.
  • Added the initialize extension to specify custom initialize actions
  • Added the finalize extension to specify custom finalize actions

Bug Fixes

  • The equal function sometimes returns wrong result when the message size is different.
  • Redeclaring unbounded arrays in different conditional branches causes internal compiler error.
  • Case of branch code size optimization causes incorrect print output.
  • The extern "C" declaration in the runtime library header files includded some C++ headers.

Release 4.3

Feature Enhancements

  • The following new TSN.1 syntax is supported:
    • Pass a message as an argument to another message
    • Pass arguments to macros
    • Array subscript expressions
  • Added the "-copiable" option to generate copy constructors and assignment operators in C++
  • Extended the print, scan, and dissect extension to support string fields

Bug Fixes

  • The clone function did not clone message arguments

Release 4.2

Feature Enhancements

  • The following new TSN.1 syntax is supported:
    • Null-terminated strings
  • Made the generated Wireshark dissector code completely standalone. It no longer requires the Runtime Library.
  • Added the bit_field extension for displaying bit field decoding in Wireshark.
  • Enabled "cross calling." TSN.1 messages compiled using different optimization flags can now call each other's pack, unpack, and sizeof functions.
  • For C++, the C++ versions of the C standard library header files are used, for example, "<cstdio>" instead of "<stdio.h>". This is to put all the C global names under the "std" namespace. To disable this, define the "TSNC_NOT_USE_STD_NAMESPACE" flag in "tsnc_custom.h".
  • Added the "tsnc_" prefix to the integer types. The old types are still available, but can be removed by defining the "TSNC_REMOVE_LEGACY_TYPES" flag.
  • Reduced code size and improved performance in the default mode.
  • The equal function now compares two messages for equality using their packed bits. It no longer does the field-by-field comparison.
  • The clone function now clones a message using the message's packed bits. It no longer does the field-by-field clone.

Bug Fixes

  • The ipv4 address was displayed in the reverse byte order in Wireshark.

Release 4.1

Feature Enhancements

  • The following new TSN.1 syntax is supported:
    • Enumerated bit field
    • Nested enumerated definition
    • Named nested message definition
  • Added the "-wireshark" option to generate Wireshark dissectors
  • Improved the pack and unpack performance in the default mode by making some key functions inline with negligible impact on code size
  • Added an "-Oinline" option to improve the performance of the performance optimized pack and unpack functions. Code size will be larger when this option is turned on.
  • Added an API function per enum that converts an enum value to the corresponding literal string
  • Added the "TSNC_USE_OPTIMIZED_FUNCTIONS" C/C++ compile flag. If your application uses the performance optimized functions, i.e. you compile the TSN.1 files with the "-Opack", "-Ounpack", or "-Osizeof" flag, compile the generated code and the application with this flag improves performance and reduces code size slightly.
  • The "TSNC_MSG_PRINT", "TSNC_MSG_SCAN", "TSNC_MSG_FPRINT", "TSNC_MSG_FSCAN" compile flags are obsolete. All functions are compiled in by default. If your application does not need any of these functions, leave the corresponding tsnc_msg_*.c file out of the Runtime Library build.
  • Multiple code blocks for a message are now appended.
  • Added the pack and unpack extension to replace the generated pack and unpack functions with user-defined ones
  • Added the dissect extension to generate custom dissection code for a bit field
  • Added "ipv4" and "ipv6" to the display extension
  • Removed the tsnc_msg_FieldType argument from the custom print and scan fucntion interface
  • The diagnose function is obsolete. Use the TSNC_MSG_ERROR macro instead for error diagnosis.
  • The enum extension is deprecated. It is replaced by the enumerated bit field syntax.
  • The hook extension is deprecated. It is replaced by the pack and unpack extension.
  • The "-O0", "-O", "-O1", "-O2", and "-O3" compile flags are deprecated. The "-O" or the "-O1" flag is equivalent to "-Opack -Ounpack -Osizeof." The "-O2" flag is equivalent to "-Ono-accept -Opack -Ounpack -Osizeof." The "-O3" flag is equivalent to "-Ono-accept."

Bug Fixes

  • The hook functions did not work for nested messages without the optimization options being turned on.
  • The interval calculation for divisions was incorrect.
  • An item was added to a custom container before it was initialized.

Release 4.0

Feature Enhancements

  • The following new TSN.1 syntax is supported:
    • Namespace
    • String constant
    • Signed bit field
    • While loop
  • Added the "-namespace" option to generate C/C++ type names according to the package specification in the TSN.1 file
  • Added the "-little" option to use little endian format for multi-byte fields
  • Generate signed integer types for signed bit fields
  • Tightened the runtime check for the size of a sized block
  • Optimized the semantic check for nested conditionals
  • Added the base extension to override the default base class
  • Added the hook extension to insert user code into the generated functions
  • Extended the type extension to support custom containers
  • Added a new "-O3" compile option
  • The use of "<type>uint64</type>" is obsolete. Use "-int64" flag instead.
  • The syntax "&id" for reference argument is obsolete. Use "var id" instead.
  • The "-pack" and "-unpack" compile options are obsolete. Use the "-Osizeof -Opack -Ounpack" options instead.

Bug Fixes

  • Incorrect pack and unpack code for bit fields with size > 32 and < 64 when the "-octets" option was used
  • Eliminated a g++ pointer type conversion compile warning
  • Static nested messages were finalized twice in the generated C++ code
  • NULL pointer references in the finalize function under certain scenarios
  • Auxiliary fields were not cloned
  • Auxiliary fields were not compared for equality

Release 3.8

Feature Enhancements

  • Added the print and scan extensions to enable user to customize the printing and scanning of field values
  • Generate constants as "const" integers instead of "#define" in C++ header files
  • Ignore "#" comments in text inputs to the Scan and FScan functions
  • Generate enum types for fields tagged with the enum extension
  • Added the "-dh" and "-dc" options to specify separate output directories for header and source files

Bug Fixes

  • The compiler crashed when an invalid message is referenced in a subfield expression

Release 3.8.1

Bug Fixes

  • Interval subtraction might result in negative field size
  • Assigning a default value to an enumerated bit field resulted in C++ compilation error

Release 3.8.2

Bug Fixes

  • Performance degradation of the scan function
  • Errorneous namespace in the generated C++ code

Release 3.7

Feature Enhancements

  • The following new TSN.1 syntax is supported:
    • Unsigned integer constant
    • 64-bit integer
  • Added the ability to document message aliases
  • Added the "-license" option to specify a license file from the command line
  • The use of "<type>uint64</type>" has been deprecated. Always use the "-int64" flag.
  • The syntax "&id" for reference argument has been deprecated. Use "var id" instead.
  • Added a compile-time check to verify only one unbounded array appears in a message and the array is the last field
  • Added a compile-time check for circular definitions, macro expansions, and field references

Bug Fixes

  • Fixed a bug in processing the code extension for C++
  • Incorrect default documentation when a message argument was undocumented

Release 3.6

Feature Enhancements

  • Optimized the packing and unpacking of byte-aligned bit buffers
  • Added a new value "header/source" to the file attribute of the code extension
  • Added a new value "c/c++" to the language attribute of the code extension
  • Added the literal extension to associate a string to an enum literal for display
  • Added a new value "none" to the display extension to disable the display of a field
  • Added a new interface Configure to customize the output format of the print function
  • Relaxed the syntax for "optional" declarations so that they may appear anywhere in the message definition

Bug Fixes

  • Fixed a bug in unpacking "optional" fields

Release 3.6.2

Feature Enhancements

  • Added support of platform specific new line character(s) in the generated files
  • Declared the appropriate member functions in the C++ message base class as "const"

Bug Fixes

  • The finalize function referred to a deleted message in a subfield expression.

Release 3.6.1

Bug Fixes

  • Fixed the subfield expression reference bug in the generated code
  • Eliminated duplicate runtime tests for subfield expressions
  • Fixed Visual C++ 6.0/7.0 compile warnings and linkage issues in scan and fscan functions.

Release 3.5

Feature Enhancements

  • The following new TSN.1 syntax are supported:
    • Conditional compilation
  • Added the "-D" option to pass pre-defined constants to TSN.1 files
  • Added support for processors that have only 32-bit integers
  • Added a new value "ascii" to the display extension for displaying ASCII strings
  • Added a check against an incompatible JVM implementation

Bug Fixes

  • NULL pointer reference in a subfield expression in the finalize function

Release 3.4

Feature Enhancements

  • The following operation has been added to the Runtime Library
  • FPrint - Print a message to a file
  • FScan - Scan a message from a file
  • "tsnc_util.c" is removed from the Runtime Library. It is no longer needed.

Bug Fixes

  • Invalid warning message when -O1 and -g options were used together
  • Fixed a customer issue in network license management

Release 3.4.2

Bug Fixes

  • Fixed a bug when "-int64" and "-octets" options are used together

Release 3.4.1

Bug Fixes

  • Added the handling of XML escape characters and CDATA sections
  • Added error report for improperly terminated extensions and comments

Release 3.3

Feature Enhancements

  • The following new TSN.1 syntax is supported:
    • Subfield expression
  • Added the storage extension
  • Added the endianness extension

Bug Fixes

  • Fixed some Microsoft Visual C++ 6.0 compile errors and warnings

Release 3.2

Feature Enhancements

  • The following new TSN.1 syntax are supported:
    • New syntax for an optional field
    • Reference argument
    • Default value for an array
  • Added support for platform independent character encoding
  • Added a new compile flag and a new value to the type extension to generate 64-bit integer type
  • Allowed Doxygen style comments to be specified for enum literals
  • Optimized the generated code further for space and speed

Bug Fixes

  • The generated code for an empty TSN.1 file failed C/C++ compilation.

Release 3.1

Feature Enhancements

  • Added a new optimization level (-O2) to optimize the generated code for space and speed
  • Added the -static compile option to generate automatic storage types for internal fields
  • As a space and speed optimization, bit fields are no longer initialized to zero by the Initialize operation. Only pointer fields are initialized.
  • Added the options extension to specify compile options inside a TSN.1 file.
  • Added more examples to the installation directory
  • Removed the runtime check for version mismatch between the Compiler generated code and the Runtime Library. It is no longer necessary.

Bug Fixes

  • For some messages, the -O1 option produced code that ran slower than without the option.
  • Generated code did not compile when a nested inline message contained only assignment statements.

Release 3.0

Feature Enhancements

  • Optimized the Runtime Library for performance
  • Improved the portability of the Runtime Library by localizing the standard C library function calls and introducing the "TSNC_NO_STD_C_LIBRARY" compile flag
  • Added the "TSNC_MSG_PRINT" and "TSNC_MSG_SCAN" compile flags to optionally compile in the Print and Scan functions
  • Simplified the generated message descriptors and C++ types.
  • Removed the limitations on the number of nested scopes and the generated C structure/C++ class size
  • Added compile options to generate handwritten style Pack and Unpack functions with special optimization for octet oriented messages
  • Allowed a memory allocator object to be specified for a message, which gives users finer control on memory allocation and deallocation
  • Defined an extension mechanism in the TSN.1 file to provide hints and directives to the Compiler as well as to customize the generated code
  • Added the display extension to display bit field in different formats
  • Added the enum extension to indicate values of a bit field belongs to an enumerated type
  • Added the type extension to generate float type for a 32-bit field
  • Added the doc extension to generate Doxygen style comments
  • Added the code extension to insert application and language specific code to the generated files
  • Added a runtime check for version mismatch between the Compiler generated code and the Runtime Library

Release 2.4

Feature Enhancements

  • Added message arguments to the parameter list of C++ message constructors
  • Generated debug information for the enumerated extension

Bug Fixes

  • Fixed a bug in processing the compile options configuration file

Release 2.3

Feature Enhancements

  • Added support for 64-bit processors

Bug Fixes

  • The array index was off by one in the diagnostic message.

Release 2.2

Feature Enhancements

  • Allowed leading underscore character for identifiers
  • For auxiliary fields, a trailing underscore character is added.
  • Added -hext and -cext command line options to specify C/C++ header and source file extensions
  • Removed the "tsnc_buf_new" and "tsnc_buf_delete" from the Runtime API. Bit buffers should now be allocated using "tsnc_new"
  • Added compile option configuration file to the GUI Control Panel and the command line interface
  • Added field value range check to the Pack and Scan operation

Release 2.1

Feature Enhancements

  • Streamlined the installation process for Windows and Unix
  • Added the GUI Control Panel

Bug Fixes

  • Improperly terminated token in the scan function

Release 2.0

Feature Enhancements

  • The following new TSN.1 syntax is supported:
    • Recursion
    • Optional field
    • Message alias
    • Variable in a message definition
    • Default value for a bit field
    • Case of field
  • The following message operations have been added to the Runtime Library:
    • Scan - Parses a message from string
    • SizeOf - Compute the size of a message
    • Equal - Compare two messages for equality
  • Removed the "tsnc_RuntimeEnv" parameter from all message operation interfaces
  • For C++, the static member functions in the "tsncxx_Message" base class have been changed to virtual member functions in preparation of upcoming releases.
  • Enhanced diagnostic capabilities for debugging message operation failures
  • The choice construct is obsolete.