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:
- 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:
- 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:
- 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:
- 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.