ICL-4300 C SDK API "Readme"

This README.HTML file documents the changes made to the ICL-4300 C SDK API. The API is a product of Industrial Control Links, Inc. of Auburn California, USA.



v6.53


Summary

    Maintenance release.

New Features/Changes

  • None.

Fixed Problems

  • Fixed problem in Modbus Slave and Bricknet driver where response to a Status or Coil query could send back invalid data bytes. Problem does not affect most Modbus master drivers.


v6.52


Summary

    Maintenance and feature release.

New Features/Changes

  • Added support for alternate CPU speeds other than the PCOS defaults.
  • Added support I/O data for ScadaFlex CPU.
  • Added support for assigning serial I/O schemes based on model number.

Fixed Problems

  • Fixed problem in ioserial.c where the system would use two control scans per I/O update.


v6.51


Summary

    Maintenance and feature release.

New Features/Changes

  • Added FTP support for ScadaBuilder files.

Fixed Problems

  • Fixed bug where email would not work with another protocol (such as FTP) on a dialup link. Each netSession maintains its own value for the 'deviceType'.
  • Fixed bad enum in RegWriteString. Check error would report the wrong function.
  • Fixed function name lookup problem in check errors where it was possible to use the name pointer before inititializing it.


v6.50


Summary

    Feature release.

New Features/Changes

  • Added support for EtherLogic serial I/O interface.
  • DI counters counter can now be mapped to registers.
  • Added additional ScadaBuilder support:
    • Register buffer formating
    • Local events/alarms
    • Log events/alarms
    • TUI alarms/logs
    • Setting of trigger scan rate.
    • Setting of counter scan rate.
    • Setting of serial I/O WDT.
    • Disable of I/O scan.
    • Disable of network sessions.
  • Added protocol analyzer feature functions ComSetProtoAnal() and ComSetProtoAnalColors().

Fixed Problems

  • TUI no longer opens the COM port if already in use.
  • TUI only closes the COM port if it opened it.
  • Fixed bug when determining hop count of routed messages.
  • Fixed bug when setting scaling clamp values.
  • Fixed memory overflows when allocating large trigger blocks.
  • ComClearRcvBuf() verifies the port is open before taking action.


v6.01


Summary

    Maintenance release.

New Features/Changes

  • None.

Fixed Problems

  • Added missing "stub" functions that would cause a non-Xinu application not to link.


v6.00


Summary

    Feature release.

New Features/Changes

  • Requires a BIOS with "library version" of 3.41 or later.
  • Added support for hardware and software handshaking on COM ports 3 thru 6.
  • Added BiosType() function.
  • Added support for reading ScadaBuilder node configuration (.sbn) files. This currently supports a subset of features that include: register allocation, triggers, network ports, network sessions, network events, TUI, I/O scaling and I/O board mapping.
  • Added Email support.
  • Added support for TUI over Telnet (Ethernet-only).
  • Added PPP dial-up support.
  • TUI Page Links can now use an associated register to disable the link based on the register value.
  • When the ICL-4300 is acting as a dialup FTP server, and there is no activity within a timeout period, the modem connection is now terminated automatically to allow the modem to be used for other activities (such as dialing out alarms). The timeout is specified by the NS_SesActiveTimeoutSet() function or by the NetSession/sesTimeoutSec configuration file parameter. The default is 30 seconds (you may want to increase this value when using the ICL-4300 in this fashion).
  • RTC functions were modified to support the EtherLogic controller board.
  • A unit can now be forced to a command prompt (while still in run mode) by pressing the reset button and entering two ESC keys on the console interface.
  • Added support to configure an FTP client status buffer in ESP and ISaGRAF.
  • Added support to read the user address switch that can be used for a TCP/IP address or a slave network address.
  • Changed the log file name from "icl4300.log" to "system.log".

Fixed Problems

  • Made communication API functions thread safe.
  • Added small delays to RTCInit() macro to fix initialization failing at high temperature.
  • Removed EFR restore capability that was causing a COM port to stop responding after a ComOpen()/ComClose() cycle.
  • Fixed bug in ComBytesToMs() macro that would crash communications at 300 baud.
  • Fixed config file error when parsing unquoted '#' characters in a 'format' parameter value. This was broken since v4.70.
  • Fixed memory leak -- if multiple modbus master sessions are attached to one port, buffer gets allocated too many times. Leak has existed since v4.50.
  • Modified API library structure to provide more data space (DGROUP) for user applications.


v5.03


Summary

    Internal maintenence release.

New Features/Changes

  • None.

Fixed Problems

  • Leading zeros on numeric values in ESP configuration files were incorrectly causing the configuration file parser to interpret the numbers as octal -- they are now forced to decimal. This was broken since v4.70.


v5.02


Summary

    Maintenence release.

New Features/Changes

  • None.

Fixed Problems

  • Modbus routing was essentially non-functional. The routed response delay was being calculated incorrectly, resulting in very slow routings, especially at lower baud rates. Response messages we not being reliably routed because of an error in how the routing table entries were being interpreted. Modbus routing was broken since the beginning.
  • BrickNet routing was non-functional. The router was generating CRC's incorrectly, resulting in the destination unit rejecting the message. This was broken since v4.50.
  • The Modbus ASCII Slave protocol driver was not processing Preset Multiple Register (0x10) messages properly. The byte count was not being extracted from the incoming message, leaving the variable uninitialized and resulting in too many or too few register values being stored. This was broken since v5.00.


v5.01


Summary

    Maintenence release.

New Features/Changes

  • Improved Modbus communications performance, especially when accessing a large number of boolean registers in a single message.

Fixed Problems

  • If a Modbus 16-bit register read message was misaligned with 32-bit or 64-bit internal registers, or a regLink was missing, the ICL-4300 would not respond to the query. Now it responds with zeros (and still generates a system error log message).
  • Removed an overly-restrictive check on NetEvent src & dst that was giving incorrect errors on read/src and write/dst "non-existent" registers.
  • When the ICL-4300 was configured as a Modbus router (also known as "store and forward"), it would not repeat received slave response messages. This problem had been unintentionally introduced in v4.60.


v5.00


Summary

    Major new feature release, including Web server and data/alarm logging.

New Features/Changes

  • Web Server
    • Added HTTP (Web) server features. This allows you to create static or interactive browser-based user interfaces to your ICL-4300 application.

  • Data & Alarm Logging
    • Added data and alarm logging. Automatically logs data records based on triggers and alarm records based on change of alarm state. Features include single or multiple files, configurable file format and maximum size, and time/date stamp.

  • TUI (Textual User Interface)
    • Added the ability to display data and alarm logs on a TUI.
    • The Page Up and Page Down keys now work in the TUI.
    • Added alarm properties that can be applied to TUI alarms or alarm logs.
    • Signed, unsigned and hex modes are now supported for TUI fields.

  • Communications
    • Incoming PPP dial-up modem connections are now supported when using TCP/IP.
    • Additional modes and flexibility are now available to send & receive "non-standard" data types over Modbus protocol. You can now set up the ICL-4300 to deal with almost any representation.
    • Any integer register type is now allowed for diagnostic mapping of Arcnet node IDs (int8 was required before).
    • A list of phone numbers can now be used for alarm dialing, with configurable control over how the system advances from one number to the next.

  • Error Messaging
    • Improved error checking and reporting while parsing the config file.
    • Implemented new error checking mechanism using FNCT.TXT lookup file. This eliminates numeric error codes and improves usefullness of the error messages.
    • The system event log mechanism has been changed so that a fresh log file (icl4300.log) is created each time the application starts. The previous log file, if any, is backed up to icl4300.bak. This makes it easier to find applicable error messages, and reduces the likelihood that the log will fill up and stop recording.

  • Miscellaneous
    • The Status LED and the reboot signal can now be mapped to Boolean registers.
    • The configuration file parser has gotten more strict about accepting floating point numbers where an integer is expected.
    • RegFormatCreate() now left justifies buffer register types that are inserted into format string.
    • Support added for new Analog Output voltage board, #43-AO16-12VA.

Fixed Problems

  • [Defines] entries can now be nested together when using config files.
  • BrickNet now has the ability to receive messages while waiting to access the media when sending a command.
  • The maximum register count for Arcnet messaging was being calculated incorrectly, allowing too many registers to be specified in a NetEvent.
  • Error messages are now displayed cleanly to the TUI.
  • The communication failure status now properly reflects success/failure over a dialup connection.
  • The presence of Arcnet hardware is now detected before the system tries to install the Arcnet device driver.
  • DTR is now cleared when the application exits in order to hang up any attached modem(s).
  • TUI autoedit feature was not working properly.
  • Fixed Arcnet device address to eliminate unreliable Arcnet device communications.
  • If IOCalMode() is called out of sequence (after scaling), an error message is now generated, instead of it just not working right.
  • If RegReadBuffer()/RegWriteBuffer() try to read/write past the end of the buffer, a partial read/write will now be performed, rather than nothing happening.
  • The build configuration files for the bnet2.c and bnet3.c sample applications were incorrect.
  • IOCalMode() and IOScale() were called in the wrong order in several sample applications.


v4.60


Summary

    New feature release.
    Minor maintenance.

New Features/Changes

  • Added support for Arcnet LAN controller.
  • Added NP_NodeIdMap() and NP_DiagMapMap() functions for network ports.

Fixed Problems

  • Modbus master can now rewind and re-evaluate received characters as invalid message are rejected. This is in support of systems that use store and forward.


v4.50


Summary

    New feature release.
    Minor maintenance.

New Features/Changes

  • Textual User Interface (TUI)
    • Added TUI value lists and TUI buttons.
    • Added auto edit feature to TUI.
    • Ctrl+N and Ctrl+P are now used for next and previous menus in the TUI.
    • Ctrl+S (or '*' on HotLink) is used for auto selection of TUI value list.
    • Ctrl+A is used to set a TUI register block to the value of the currently selected register.
    • Made attributes and colors configurable on the TUI.
    • Changed TUI key scan time to 50ms from 100ms.
    • TUI now supports both hierarchical and flat menu structures.

  • Events and Alarms
    • Removed LE_EventCreate() and added LE_NumEventCreate() and LE_StrEventCreate().
    • Added NE_AddTrigger() and LE_AddTrigger().
    • Added AlarmAddTrigger() and AlarmAddTriggerAck().
    • Added NetAlarmAddAlarm() and LocAlarmAddAlarm().

  • Communications
    • Added FTP Server support.
    • Added Telnet Server support.
    • Network statistics and comm fail information can now be mapped to registers.
    • Moved response delay parameter from network sessions to network ports.
    • Changed NS_ModemConnectTimeout() to NS_ConnectTimeout().
    • BrickNet always routes using routing table from session that monitors.

  • Other
    • Added thread safe versions of getdate() and gettime().
    • Increased configuration file (ESP) parsing performance.

Fixed Problems

  • TCP/IP features are now supported when using XINU.
  • BrickNet can now respond to messages while waiting to send a command or during an event or cycle gap.
  • API init now detects if Sockets is loaded instead of packet driver.
  • Removed "check" error on pager ID when using a numeric pager.


v4.20


Summary

    Maintenance Release.

New Features/Changes

  • Added Telnet command prompt support.
  • Added Modbus/TCP Master protocol support.
  • Syslogs for net event errors now display the error value.
  • Net events with only a startup trigger are now allowed by parser.
  • TUI can now navigate up, down, left and right.
  • WDT status register is restored on exit.

Fixed Problems

  • Fixed problems with session-based address-qualified triggers and trigger hold-off feature.
  • Fixed problem where application exit code was not being passed to DOS when Multitasking SDK used.
  • Fixed application shutdown operation.
  • Fixed handling of spurious interrupts on IRQ7 (INT0F).
  • Added additional error code checking for calls to the TCP/ IP stack.


v4.10


Summary

    New feature release.
    Minor maintenance.

New Features/Changes

  • Made enabling of power fail interrupt conditional. A new user function has been added -- PfiEnable().
  • Added to check to see that power fail interrupt is enabled if registers are allocated in NVRAM
  • Added TCP/IP Support for Ethernet (C SDK only).
  • Added Modbus TCP Slave (server) protocol (C SDK only).

Fixed Problems

  • All EEPROM cal values are now stored and read as signed 16 bit values. This resolves the problem of I/O boards which do not have a DC offset adjust for zero volts/current when the DAC is set to zero.


v4.00


Summary

    Major feature release, adding support for the following:
    • Voice playback and recording using local or dial-up connection.
    • Alarm processing, with annunciation using voice or digital outputs.
    • Dial-up modem data communications.

New Features/Changes

  • Alarm Processing
    • Alarm records may be created using function calls or with an ESP configuration file.
    • Alarm and alarm acknowledgement conditions are defined by Trigger records.
    • Alarms may be annunciated using local voice messaging, voice messaging over a telephone or using a digital output.

  • Voice Recording/Playback
    • Support for the #43-VA-8 and #43-VM-8 voice recording/playback hardware options has been added.
    • Low-level voice recording/playback operations may be performed using function calls, or voice may be handled automatically using an ESP configuration file or functions to create appropriate records.

  • New configuration record types
    • In conjunction with other changes, several new record types have been added. These records may be created either with an ESP configuration file or using function calls. The new record types are listed briefly below:
      • RegInit - initializes registers or buffers with values
      • Format - generates output to a buffer based on a format string and register value fields
      • LocalEvent - stores a value to a register based on a trigger
      • VoiceMsg - defines an individual voice message recording
      • VoiceSeq - defines a voice message made of a sequence of individual recordings and register value fields
      • Alarm - defines an alarm, including trigger and acknowledge conditions
      • NetAlarm - defines how an alarm is to be annunciated via numeric or alphanumeric pager
      • LocalAlarm - defines how an alarm is to be annunciated with a local digital output
      • Vui - defines a VUI (Voice User Interface)
      • VuiMenu - defines a menu for use in the VUI
      • VuiReg - defines a register for use in the VUI

  • Communications
    • NetSession defaults have been changed (respTimeoutMs: 1000 => 3000, respRetry: 3 => 2)
    • Added cfgErrorCount to tNetStats in order to track configuration-related communications errors.

  • Other
    • If the CfgFileParse function is called with a filename that does not exist, an error is now generated instead of a fatal error (the program keeps running).
    • If the file extension is not specified when calling CfgFileParse, ".ini" is now assumed.
    • Subsets of I/O channels may now be mapped to registers, instead of requiring the whole block to be mapped.
    • A new function, TimeStatsReset, has been added to reset the application program time statistics.
    • If NetPort is null, TUI now defaults to console.
    • Quit key now allowed from TUI when using XINU.
    • TUI now allows lower case in field entries.
    • The TUI disables the 'P' key to edit the page number if the showPageNum flag is FALSE.
    • Vers.h was renamed Vers4300.h to avoid conflicts with other ICL libraries.
    • Added MdmRedir modem redirector sample program.
    • All network trigger function names have changed to be more generic, now supporting both local and network triggering.

Fixed Problems

  • The exit function may now be called from an application program -- it cleans up properly and returns to DOS ( handled in both single tasking and multitasking cases).
  • The functions DOWriteImmed and AOWriteImmed now update the corresponding register even if the register is not mapped to an I/O channel.
  • Fixed problem that prevented including icl4300.h in cpp file.
  • When 32-bit or 64-bit registers are mapped to Modbus messages, reads/writes from/to partial 32-bit or 64-bit registers are no longer allowed. This prevents "garbage" values in the unspecified register bytes (zeros are read in partial registers, and nothing is written to partial registers).


v3.09


Summary

    Maintenance release.

New Features/Changes

  • Improved error message when an unknown Trigger name is referenced in a NetEvent record.

Fixed Problems

  • Sample configuration files Samp4.cfg, Samp5.cfg, Samp7m. cfg & Samp7s.cfg were missing.
  • Modtui.cfg sample file incorrectly left out required modules.
  • Stack overflow could occur when timer or delta triggers were created and Xinu used. Increased stack sizes for timer and delta trigger threads.
  • When ISaGRAF kernel was built using the API, registers in TuiField records improperly generated warning messages. Does not affect normal applications.
  • System would not switch between multiple NetSessions on the same port.
  • A missing 'blockSize' parameter on a 'read' or 'write' NetEvent would not generate an error message, but would default to 0 and generate messages with zero-length data.
  • When ISaGRAF kernel was built using the API, Trigger records were improperly rejected. Does not affect normal applications.
  • Y2K - SysLog error logging function did not print year properly when year reached 2000.


v3.08


Summary

    Maintenance release.

New Features/Changes

  • 3 new trigger types have been added. The triggers are created with the following functions:
      NT_TrigNetSesCreate()
      NT_TrigNetAddrCreate()
      NT_TrigTuiCreate()
    They may also be created from the configuration file. The triggers are activated when registers are written to by communications or the TUI.
  • Removed vers.c from project. Does not affect user applications.
  • Changed SysTickUserFnct() to SysTickCyclicFnct(). Does not affect user applications.
  • Added BiosCfgPtr() and BiosConsoleGet() functions.

Fixed Problems

  • There was a problem with Modbus message byte ordering that only affected the Isagraf kernel, which is built on top of this API. Does not affect user applications.
  • Made default regMode set to 'auto' for Isagraf, instead of 'MsbFirst'. This only affects the Isagraf kernel (built on this API). Does not affect user applications.
  • Removed all "static const" declarations which seem to cause random fixup overflow by the linker.
  • Fixed bug in FarToAbs() macro. Does not affect user applications.
  • Fixed bug in calculation of NVRAM base addess (specifying 512K would start at address 0x7fC00, which is standard RAM).


v3.07


Summary

    Maintenance release.

New Features/Changes

  • A new function, NE_UnTrigger(), was added to allow the user program to clear the pending flag on a Net Event. This can be useful at application startup time to avoid sending events until things have settled out.

Fixed Problems

  • None.


v3.06


Summary

    Maintenance release.

New Features/Changes

  • A new function, NE_Active(), was added to allow the user program to find out if a network event is in process or has been completed.
  • A new function, NT_TrigClear(), was added to allow the user program to reset a delta or edge trigger (clear the condition by setting the last value field equal to the current register value). Another new function, NT_TrigClearAll(), performs this action on all triggers. At system initialization, NT_TrigClearAll() is automatically called after UserProgInit() to prevent a false trigger at startup.
  • Added UserProgEarlyInit() function which is called immediately upon entry to main(). This was added to provide a way to perform some initialization before Xinu is started in the Multitasking SDK. Not typically needed in normal applications.

Fixed Problems

  • Made various event state changes thread safe.


v3.05


Summary

    Maintenance release - Modbus fixes, time statistics.

New Features/Changes

  • Time statistics functions were added to track the overall loop time and time spent in UserProgMain (diagnostic aid).

Fixed Problems

  • Modbus RTU Slave bad message rejection was further improved by checking the register count against the byte count for FMC and PMR messages. This eliminates a case where the communication driver was trying to process the data portion of a message addressed to another slave as a valid message for itself (the message is now rejected sooner, which allows the slave to more quickly recognize a following good message).
  • If a character gap is detected in the Modbus RTU Slave driver, instead of throwing away any received bytes, the receiver state machine is reset and the received bytes are reevaluated beginning at the next possible start of message byte. This improves the ability to detect good messages embedded in noise or preceded by messages to other slaves.


v3.04


Summary

    Maintenance release - Modbus fixes.

New Features/Changes

  • A flag has been added to the network session indicating whether or not broadcast messages should be accepted. The default state for this flag causes broadcast messages to be ignored, which provides a minor performance improvement.

Fixed Problems

  • It was possible for the Modbus RTU Slave driver to reject good messages if they were preceded by noise or messages destined for a different slave. The driver could "sync up" with data or noise and begin to interpret the stream as a message. The CRC would then fail and cause the data to be discarded, possibly discarding some or all of a subsequent good message. Now, if a message is rejected, the driver backs up, throws out the first byte and attempts to re- interpret the remaining data as a message.
  • Modbus RTU Slave bad message rejection was improved by adding cases for illegal length and illegal broadcast message type codes so that the message or noise can be discarded sooner.
  • Broadcast messages were not being handled properly in the Modbus Slave RTU driver. If a valid broadcast message was received, a response would be generated (none should be). Now responses are not generated.
  • Increased the default net session character gap timeout from 500 ms to 5000 ms to account for large delays in UserProgMain (if user application code is slow). This timeout is used in the Modbus slave driver to restart the receive state machine if there is a large gap in the incoming data stream.
  • There was no prototype for the function NS_RcvCharTimeoutSet.


v3.03


Summary

    Maintenance release.

New Features/Changes

  • None.

Fixed Problems

  • When using the -10/10V mode on an AI16 board with no calibration mode (kCalNone) the raw values would get clamped at 0 and 4095. The raw values will now show the full range range from -8092 to 8091.


v3.02


Summary

    Maintenance release.

New Features/Changes

  • None.

Fixed Problems

  • When physical DOs were updated the channels were being reversed.
  • When a missing "reglink" was detected (i.e. Modbus message received and no register type was associated with the message type), no error message was logged.


v3.00


Summary

  • This is a major new release with many changes and improvements. Applications that compiled with version 2.50 will need significant changes in order to compile with v3.00. We apologize for the inconvenience that this will cause you, but felt it was necessary in order to make improvements to our product that customers have been asking for and which will make the system more flexible, powerful and usable.
  • Requires BIOS version 3.01 or later.

New Features/Changes

  • Register Banks
    • A major change has been made in the mechanism for allocating and handling data registers.
    • Removed support for pre-defined register types such as DI, DO, AI, AO, AIINT and AOINT.
    • All registers are now allocated using register banks defined by the user.
    • Associations may be made between register banks and Modbus communications.
    • Added register-to-register scaling and clamping.

  • Communications
    • Added support to Modbus for "nonstandard" data types such as INT8, INT32, float and double.
    • Added register link functions for linking specific register banks to the different message types contained within a protocol. This is utilized by Modbus RTU and ASCII Slave protocols.
    • Delta triggers (Constant and Register) now update the entire register block when any one of the registers crosses the delta threshold.
    • ICL ASCII, Optomux and Ultimeter protocols are no longer supported. We found that no one was using these protocols, and it was causing us a lot of extra work to try to maintain them as made changes to the system. If you really want to run one of these protocols, contact Technical Support, and we can give you the source code from the last supported release for you to integrate into your application code.
    • BrickNet peer-to-peer communications protocol has been extended and this is its first full-featured implementation.
    • Communications system improved to allow the definition of more complex triggers.
    • Message routing for Modbus and BrickNet have been added.
    • Communications status and statistics functions are now fully implemented.
    • The interrupt priorities were rearranged, to give COM1/COM2 highest priority. This allows COM1/COM2 to handle higher baud rates.
    • Alternate network session support has been added.
    • The serial communications ISR and timer ISR were optimized for speed, increasing overall efficiency and increasing highest acceptable baud rate on COM1/COM2 (which have no FIFOs).
    • Receive and transmit buffer size parameters were moved to the network port, from the network session.
    • Added support for nine-bit communications.
    • Network port, event and session names are now case insensitive.
    • Added function to determine the number of bytes in the transmit buffer for serial communications.
    • The efficiency of ComWaitUntilXmtEmpty was improved when used with XINU.

  • ESP Configuration File
    • Additional error checking has been added to the ESP parser.
    • Many new record types and keywords have been added and/ or altered to accomodate these changes.

  • Miscellaneous
    • A powerful new feature was added called the Textual User Interface, or TUI, which allows you to set up a terminal mode user interface for viewing/changing information stored on the ICL-4300.
    • Added ComEcho sample program to illustrate use of low- level serial communications functions.
    • A number of new sample programs were added, corresponding to descriptions in the C SDK Manual.
    • Added a function to set a limit on the maximum size of the system log file.
    • System log messages now optionally output to the console, in addition to the log file.
    • Much of user function argument checking has been converted to Check() function calls, which generate a system log message on error.
    • Debug information is now stripped from the libraries.
    • Added parameters to configuration file for analog input averaging, digital input inversion and system log message display.
    • New function DelaySec added to give seconds-based delay.
    • Support added for Super Size PCOS (flash memory and NVRAM).

Fixed Problems

  • Fixed scaling error with AI16 IO boards in 0to20mA mode. Values would scale to large value when the current went negative.
  • Fixed BrickNet communications error. When waiting for a response to a command and a command from another node is received, we would respond and return the comm state back to idle. When our response finally arrived we would reject it since we were no longer in the receive response state.
  • When parsing an [OPTIONS] record the proper parameter line number is now returned on an error instead of the record line number.
  • Removed debug information form the BC31 libraries.
  • The creation of Modbus master net events are now rejected when an AI or DI register is specified as the destination for a write.
  • For long messages (>200ms), NP_NetDisconnect could disconnect early. This could cut off the tail end of RS- 485 transmissions, depending on how the Trail Delay was set.
  • Problem in makefile was causing libraries to be compiled as 8086 for all compiler versions, as opposed to generating 80386 code for 4.5 and 5.0 compilers.
  • Changed library makefile to cause in and out I/O instructions to be generated inline, instead of using function calls (which is the default behavior in BC 5.0).
  • A memory leak was fixed that would occur if the network system was shutdown and re-started.
  • LSR error (framing, parity) status was not being checked in ComWaitUntilXmtEmpty().
  • The RTS signal on COM1 was not enabled.
  • The response delay feature was not working.
  • Serial port control signal access functions did not work unless the port was open. Now they work even when the port is closed.


v2.50


Summary

  • Added the use Data Banks for storing various data types (modified IO to use these).
  • Added preliminary support for BrickNet peer-to-peer communications protocol.
  • Added Support for bipolar and multi-mode IO boards.

New Features/Changes

  • Added new sample programs illustrating use of Configuration (.ini) File.
  • Scaling data is now stored as 32 bit signed integers.
  • Added Analog Input averaging.
  • Added support for multiple calibration modes.
  • Changed scaling and clamping to be based on percent.
  • Added Com7 for modem support.
  • Inverted state of AI and DI filters.
  • ComReadStatus and associated enums changed to support multiple error values. Each bit in value no represents a different error.
  • Enabled transmit and receive FIFO usage on COM3-COM7 to reduce interrupt rate and allow higher baud rates without receive overruns.
  • Revamped Com ISR to process received bytes first, reducing likelyhood of receive overruns.
  • When used with XINU, ComWriteBytes and ComWriteString now use a more efficient waiting process, if no room in available in transmit buffer, to allow other threads more CPU time.
  • ComReset now sets port status to normal.

Fixed Problems

  • The makefile icl4300.mak had incorrect XINU path.
  • In BUILD.BAT, it would remember the LIST attribute once it was used, and next time BUILD was run, would assume there should be a list file, even if this was not true.
  • Sample programs modrtums and modrtusl had .cfg files that did not enable the needed modules.
  • PCOS API vers.h would overwrite ICL-4300 vers.h on installation. Now ICL-4300 vers.h is retained.
  • Whenever the UART LSR register was read, the value was not always checked for parity/rcv overrun/framing errors. Thus some errors could be missed and not reported via ComReadStatus.
  • Receive overflow (data being received faster than application is reading it from software buffer) was not being recorded.
  • When used with XINU multitasking kernel, communications lockups could occur at high baud rates if multiple ports were used simultaneously.