(CRITICAL) Upgrading the Operating System will reset all the CR6’s settings back to the factory defaults. Sending this OS remotely is not recommended. To restore settings after the update, it is recommended that a backup be made of the current logger settings or take programmatic measures to ensure your settings can be restored. This can be done using the DevConfig backup utility or CRBasic instruction SetSetting. Watch the Video Tutorial: Sending an OS to a Local Datalogger.
(WARNING) After upgrading the CR6-WiFi and CR6-RF451 to this version of the operating system, it is recommended that the user also update the operating system in the radio daughter boards. This version of the CR6 operating system has been tested with version 2.0 of the Wifi daughter board and version 3.0 of the RF-451 daughter board.
Fixed HTTPS when using HTTPPost() with large files.
Fixed Status Table to return -1 instead of 1 for port status.
Implemented file send for .iobj via the DevConfig protocol. This allows sending OSs to daughter boards using the Send OS tab in Device Configuration Utility.
Added the ability to display Type Double in Custom Menus.
Fixed an issue when CardOut() files are being allocated. It no longer allows other files to be opened for writing on the card until the process is finished.
Fixed referencing TableName.FieldName() when field is of type Double.
Fixed the datalogger’s FTP server so it will append the final packet to the incoming file.
Fixed PortsConfig() when SDM is active.
Fixed PPP dialing when dialing is done.
Fixed DHCP when the Ethernet setting is Always On and cable is removed then reinserted.
Fixed DHCP_release() when DHCP has not been started.
DNS client fixed to check for a negative TTL which can cause a much larger timeout before the DNS client tries to get a new IP address.
Fixed function declaration with (). Changes recently made to my_stricmp() internal function caused compile errors.
Updated operating system to get FILE_SEM when starting os_recompile() to avoid deadlock with SETTING_SEM elsewhere.
Fixed IP tracing of HTTP. It could possibly overwrite memory in certain conditions.
Fixed DHCP for non-Wi-Fi loggers.
Fixed GetDataRecord() when a data interval is specified and when the maximum number of records parameter is either 1 or -1.
Modified the operating system to avoid writing a file via IPTrace from the IP task or BMP task since it might take longer than the watchdog timer for these tasks.
Added DHCP_release before stopping DHCP so specific PPP modems will work when re-starting DHCP.
Fixed PPPClose() to not execute a callback function that has not yet been initialized. This can happen if PPP is opened, but the program closes PPP before the callback function is initialized.
Fixed TableName.TimeStamp() from using a bogus pointer.
Modified the operating system when an out-of-bounds condition is detected within a data table to no longer allow the compile to continue. This was causing the PC compiler to crash.
Modified the pre-compiler to allow new line _ continuation to be before the beginning of a comment.
Fixed false error for units "already assigned" by fixing my_stricmp() function when tabs and/or spaces are at the end of the two strings to be compared.
Fixed ArrayLength(X) when X is a parameter passed into a subroutine that is not an Array. It now returns 0 instead of the local array's dimension.
Added option 29 (MD5) to CheckSum().
Fixed a very unlikely bug: If PPP dial string is PPP or blank and "CLIENT" is received while trying to close PPP and PPP is on a comport that uses the flusher.
Fixed PortSet() and SW12() when called outside of a Scan/NextScan when the option is specified in the measurement task. In this case, force it to run in the processing task.
Fixed ArrayLength() when called within a large program.
Fixed ArrayLength() to return 0 if a variable array is not passed in.
Fixed parsing parameters; the operating systems now inserts a 4 byte value for line number at the start of each parsed instruction. Previously, one 4 byte value was used to maintain instruction number, structure size, and program line number. This allowed only 12 bits for the line number. With longer programs, this caused confusion in compile error messages.
Fixed CPI by removing delay when sending scan start information on the CPI bus. This delay was causing the scan to start late by one interval.
Fixed SDI-12 and PortSet() together. Let the minion handle the other port when configuring for SDI12 (inversion) and output.
Fixed PC compiler showing the wrong program name when an include file is used.
Fixed port status in Status table when SDI-12 is active.
Modified the initialization of SDI-12 so the control port will invert if the port is an output at the time of the SDI-12 configuration.
Removed extra space between <html> and <head> that were not needed in the Web API html output.
Removed extra <!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\"> that was being added to the html output of WebAPI commands ListFiles, SetValue, BrowseSymbols, and ClockCheck.
Modified the datalogger's web server to add <HEAD> and <TITLE> tags and to report the title with the same message that is sent in the http header (like other web servers do). For example, a 404 error now reports 404 Not "Found".
Changed SetClock() so the usec and seconds passed in are adjusted to be in bounds before converting to usec since 1990. This allows CRBasic code to adjust the clock by simply adjusting the usec component of the RealTime() instruction.
Fixed Include files with : and \ in them which resulted in erroneous error message of "file too long" in the pre-compiler.
Modified the operating system so CS I/O does not check if baud rate is faster than 115.2K for setting the power-up mode.
Added the ability to send all the data tables when streaming files and the source parameter is "" (a NULL string).
Limited UDPDataGram() queue to 10 before the head of the queue is released and the memory freed.
Changed SendGetVariables() to abort if it tries to access variables or store into variables out of bounds.
Modified the operating system when Status.WatchdogErrors is non-zero. It will no longer write to an IP Trace file that is writing via the 3212 option in the Files Manager setting.
Modified GetVariables() to allow a variable index into the destination variable.
Changed GetVariables() and SendVariables() to skip writing if they would write out of bounds in an array.
Enhanced EmailSend(...,Attachments,..) and FTPClient(...,LocalFileNames,...) when sending multiple files when some of the files are "streaming" data files. The comma-separated files can now include streaming data files intermixed with other files.
Modified DataEvent() to restart if the RecAfter parameter is negated and the start trigger condition occurs during the RecAfter count.
Modified Web service: if DataQuery references a field name that does not exist, return no command.
Modified the TCP Client data streaming functions (Email, HTTP, FTP). If the parameter specifying the data table is a variable, then state of variable is kept for all the declared data tables independently so the same instance of the function can be called referencing different data tables.
Fixed SIO4 getting output from a variable of type Long.
Fixed the CRBasic pre-compiler to flag an error if the Public or Dim declaration of an array is missing the ")" character terminating the dimension.
Modified the SDMSIO4() instruction so the Dest option can be of type Long.
Modified CheckSum() to work on a file if the source parameter is a file name present in the datalogger's file system.
Fixed the Datalogger Web Service API for the ClockCheck instruction when using the JSON formation option. Removed the extra space in the "description: " field.
Fixed CheckSum() using the CRC32 option to work with the CheckSum() of a File.
Fixed the Datalogger Web Service API "ListFiles" instruction's "last write" field for the drive. It is meant to be the date of the operating system, Status.OSDate.
Improved the TimerIO() port conflict error message. Changed from "To return time since chan %d, it must be programmed for a function < %d. to "To return time since chan %d, chan %d must be programmed for a function < %d.".
Modified the CRBasic pre-compiler to use our native csi_atof function rather than GCC library function to convert strings to floats. This brings the CR3000, CR1000, and CR8X0 pre-compilers in line with the CR6 pre-compiler which was already using this method.
Fixed HTTPPut() to not respond until the end of the message (file) in the event that it is not authorized (HTTP error 401). The web browser is not able to see the header response before the entire file is sent.
A hidden constant table can now be displayed via the keyboard display only if security is set to the highest level.
Modified the operating system to return 9 bytes for the TimerIO() internal read timer input capture result. Previously, we returned 8 bytes. Also, when doing port I/O commands, make sure the special port function is cleared.
Changed TimerIO() so that 9 bytes are returned indicating an error. Previously we reported this with the MSB of the count and only returned 8 bytes.
Changed the int-16 bit compare to an int-32 bit compare. This fixed a problem with TimerIO() and the time since previous.
Fixed a typo in the error message "Result must be a variable of type string" to "Result must be a variable of type string" in GOES instruction.
Web service services HTTPPost() the same as HTTPGet(). API commands like FileControl would generally be issued as HTTPPost() instead of HTTPGet().
Fixed GetDataRecord() to not insert a -1 for the interval of the local data table. This -1 erroneously flagged the table to act as an interval-driven table that resulted in a misleading compile error if the same table was referenced by a subsequent GetDataRecord(). The error was removed.
Fixed re-syncing the CPI bus with SC-CPI and slow sequences when a module is disconnected.
Modified the operating system to allow "then" with the "#ifdef" preprocessor directive.
Fixed reporting SDI-12 operations in port status of Status table.