You are viewing documentation for version: 2.7 | 2.13 (latest) | Version History
- Corrected the frequencies used by Z-Wave in the China, Malaysia, and India regions to match the specification. China was using the EU frequencies, Malaysia was using 868.10 MHz, and India was not applying the required 20 kHz offset to the R1 channel.
- Fix an issue on the EFR32xG21 where the medium power and low power PAs might not complete ramping and end up transmitting at a lower power than desired.
- Improved interoperability of the BLE 1Mbps PHY on EFR32xG13 devices.
- Improved performance of OOK PHYs.
- Updated packet trace format to include extra information for BLE packets.
- Fixed an issue introduced in 2.6.2 where issuing a RAIL_Idle() with mode RAIL_IDLE_FORCE_SHUTDOWN_CLEAR_FLAGS could sometimes cause the receive FIFO to be corrupted and trigger a RAIL assert with code (RAIL_ASSERT_FAILED_ILLEGAL_RXLEN_ENTRY_STATUS).
- Various bug fixes and improvements for the EFR32xG21 parts.
- Updated the PA curves on the EFR32xG21 chips to slightly improve transmit power accuracy.
- Resolved an issue where RAIL_GetChannelHoppingRssi would return an RSSI value even if receive was disabled.
- Resolved an issue where RAIL_GetChannelHoppingRssi would not update the RSSI value while receiving packets.
- Resolved an issue in multiprotocol where an absolute event with a non zero slip time would always work even if scheduled in the past.
- Resolved an issue on the EFR32xG21 platform that could cause the chip to hang when coming out of a reset if RAIL_Idle() was called at the wrong time.
- Added RAIL_GetChannelHoppingRssi API to allow the user to read the RSSI from each channel when channel hopping is enabled.
- Fixed an issue where CRC-failed packets received with RAIL_RX_OPTION_IGNORE_CRC_ERRORS would be reported with RAIL_RX_PACKET_READY_SUCCESS instead of RAIL_RX_PACKET_READY_CRC_ERROR when the RAIL_EVENT_RX_FRAME_ERROR event isn't enabled.
- Fixed an issue on the EFR32xG21 platform that caused the chip to incorrectly compute the PA ramp time at high power levels. If this happened, the ramp time would be higher than expected and cause large delays in the RAIL_StateTiming_t::rxToTx time which is used for sending ACK packets.
- Fixed an issue on the EFR32xG21 platform that could cause erroneous Rx overflow events and failed receives when using the 125Kbps BLE coded PHY.
- Fixed an issue causing the receive antenna to always be reported as antenna 0 when using receive antenna diversity.
- Added alternative APIs for calculating receive timestamps, which give correct results for Long-Range BLE: RAIL_GetRxTimeFrameEndAlt, RAIL_GetRxTimePreambleStartAlt, RAIL_GetRxTimeSyncWordEndAlt.
- Fixed an issue where receive events could corrupt the transmit packet length in frame type based length mode if they came in between the start transmit call and the actual transmit.
- Fixed an Auto-ACK problem where ACKs were being sent for CRC error frames when RAIL_RX_OPTION_IGNORE_CRC_ERRORS is in effect.
- Fixed a math error that could cause the RAIL_CsmaConfig_t::ccaDuration to be shorter than requested. This would happen whenever the (ccaDuration * rx_baudrate) exceeded the size of a 32 bit integer.
- Fixed an issue in the multiprotocol RAIL library where the RAIL_GetTxPower() function could return the wrong output power if called with any RAIL handle other than the active one. We will now return the actual power that would be set if that protocol is active.
- Fixed the PA conversion code so that it better handles error conditions and will not trigger a fault when given NULL parameters.
- Added new API to retrieve the channel index of the most recent Beam packet accepted: RAIL_ZWAVE_GetBeamChannelIndex.
- Added a new RAIL_DelayUs() API for short blocking delays using the RAIL time base.
- Fixed a problem where state timings would not properly be updated when switching if both protocols used the same channel configuration structure.
- Fixed an issue on the EFR32xG14 series that prevented Rx antenna diversity from functioning properly. This was introduced in the RAIL 2.5.0 release.
- Restored pre-2.5.0 behavior with RAIL_SetRxFifoThreshold() to disable threshold events from occurring when passed an rxThreshold of the FIFO's size or larger. A 2.5.0 change allowed such rxThreshold settings to cause the event to fire when the buffer became full, though it's been mis-documented as one byte away from becoming full for quite a while – something that was never actually implemented and is now removed from the documentation.
- Worked around a BLE longrange problem where Rx abort could cause deafness.
- Added a channel hopping feature with RAIL_ConfigRxChannelHopping and RAIL_EnableRxChannelHopping. This feature allows users to specify a list of channels to scan over during receive. This feature allows for much faster scanning with less delay (about 100us) than simply repeatedly calling RAIL_StartRx() with different channels.
- Included two default transmit power curves in the library: RAIL_TxPowerCurvesDcdc and RAIL_TxPowerCurvesVbat. When the pa-conversions plugin is used, one of these can be passed to the plugin, based on the way the power amplifier is powered.
- Added the ability to specify a Link Quality Indicator (LQI) conversion callback with RAIL_ConvertLqi such that the hardware's LQI value can be changed before application consumption of that value.
- Fixed an issue where RAIL_StopTxStream() was taking an extended amount of time to complete.
- Certain received packet details in RAIL_RxPacketDetails_t, which were formerly available only for successfully received packets, are now also available for unsuccessfully received packets.
- RAIL_DataMethod_t and related documentation have been updated to reflect that many FIFO_MODE concepts can now be used in PACKET_MODE, and the distinction between these modes has become nearly invisible for transmit. Also eliminated the previous restriction that both receive and transmit RAIL_DataMethod_t must match in the RAIL_DataConfig_t passed to RAIL_ConfigData().
- RAIL_ConfigData() no longer resets the receive FIFO when switching to RAIL_DataMethod_t::FIFO_MODE.
- Added a new RAIL_TxOptions_t option RAIL_TX_OPTION_CCA_PEAK_RSSI to allow the user to use the peak RSSI instead of the average RSSI over the CCA period during CSMA and LBT transmits. This is only supported on EFR32xG12 and newer silicon.
- Added a new RAIL_TxOptions_t option RAIL_TX_OPTION_ALT_PREAMBLE_LEN to allow the user to transmit with a runtime-specified preamble length. This alternate preamble length is set with RAIL_SetTxAltPreambleLength.
- Added Z-Wave PHY configurations and functionality to the RAIL library.
- Fixed an issue that could cause register corruption in very rare conditions due to a bus access race condition. The specific registers impacted were limited to those related to the radio and the corruption was most likely when running the coherent IEEE802.15.4 PHY on the EFR32xG12 and EFR32xG13 platforms. On other platforms and PHY configurations the issue is possible though very unlikely and never observed (id: 317234).
- Resolved a multiprotocol scheduler issue that could cause some interrupted events to not be reported to the caller. Since these events never run there are no other related events either so state machines relying on RAIL events could get stuck in invalid states (id: 341124).
- Enhanced RAIL_SetRxFifoThreshold() and RAIL_SetTxFifoThreshold() to now support a threshold value of RAIL_FIFO_THRESHOLD_DISABLED to explicitly disable a threshold previously established.
- Fixed a documentation issue where a variety of RAIL APIs were incorrectly shown as "Referenced by RAIL_CopyRxPacket()".
- Fixed an issue with RAIL_Sleep() that could cause the wake event to be set very far in the future. This would prevent waking at the proper time and cause problems for the application.
- Fixed an issue in the multiprotocol library where the txToRxSearch time set by RAIL_SetStateTiming() would be lost after a protocol switch if there were no timings stored in the channel configuration.
- Fixed an issue preventing radio coexistence transmit abort counter from incrementing.
- Fixed radio coexistence HAL_CONFIG support for shared priority and shared request.
- Fixed one case where calling RAIL_Idle() with the mode set to RAIL_IDLE_FORCE_SHUTDOWN could cause us to output partial packet trace appended information.
- Deferred multiprotocol event failures until just before the event must start when the expected runtime of a task causes it to not fit. These were previously reported immediately even though future tasks could change.
- Added a RAIL_CopyRxPacket() helper for use after RAIL_GetRxPacketInfo().
- Added a fast, but inconsistent, transition times mode. This can be activated by setting state timings to 0.
- Resolved a potential RX FIFO corruption that could occur when calling RAIL_HoldRxPacket() or RAIL_PeekRxPacket().
- A multi-timer API was added that allows for multiple software timers all driven off the one hardware timer. This must be explicitly enabled and will use more code than the standard APIs, but can be done through RAIL_ConfigMultiTimer(). Once in use, all timer APIs must use the multi timer versions to prevent conflicts with the hardware timer.
- Added diagnostic functions RAIL_Verify() and RAIL_ConfigVerification() to provide a means of verifying internal radio memory contents.
- Added alternative calibration APIs to RAIL_Calibrate, for potential code size savings: RAIL_CalibrateTemp, RAIL_CalibrateIr, and RAIL_ApplyIrCalibration.
- Fixed an issue where requesting a small fixed CSMA backoff could result in a very large value from being selected instead.
- Made PHY configuration improvements for BLE and Zigbee on the efr32xg14 platform.
- In FIFO mode on the EFR32 the FIFO could only be read after 8 bytes were received. This restriction has now been lifted though the user must be careful and understand that in certain cases they could be reading appended information and not packet bytes.
- On the EFR32XG14 some BLE packets showed up with invalid timestamps. These are now filtered and reported as aborted to the user so that the stack does not time sync to an invalid timestamp and lose the connection.
- Fixed an issue where state transition times would not be recomputed when changing the PA ramp time on the fly.
- Fixed a regression in 2.1.1 that caused Frame Type based length configurations to lock up the receiver. There was an issue where bits in the byte that were not supposed to be a part of the frame type were being included some times and could cause problems in the receive processing logic.
- Prevented RAIL_StartRx() from resetting the receive FIFO. This was a legacy feature that was not documented and, though it generally worked, would cause problems to users processing deferred receive events or users that called RAIL_StartRx() in an interrupt disabled context. If this behavior was required it can be replicated by idling the radio and then calling RAIL_ResetFifo() with rxFifo set to true before any calls to RAIL_StartRx().
- Fixed an issue in the RAIL_IEEE802154_SetAddresses() function that caused it to never set any long address except for the first one and to set that one to the value given in the final long address entry.
- Updated the documentation for the IEEE 802.15.4 and BLE protocol functions to show properly usage with the new RAIL 2.0 API.
- Dynamic Multiprotocol fixes:
- Added support for each protocol having auto ACK enabled by allocating space for independent ACK buffers.
- Ensured that the sync word is properly output in BLE Long Range no matter when the packet data is loaded into the transmit FIFO.
- Prevented the sync word in packet trace feature from being turned on in Zigbee when it's enabled by BLE.
- Removed unimplemented functions RAIL_GetActiveChannelConfig() and RAIL_GetActiveChannelConfigEntry().
- RAIL_PauseTxAutoAck() was internally pausing the Rx AutoAck logic. This has now been corrected.
- EFR32XG12 and EFR32XG13 devices were detecting a high number of false 15.4 sync words. Even though these packets were eventually filtered they would show up on PTI. In 2.1.1 there should be significantly fewer of these packets as some of this was caused by a bug in a configuration algorithm.
- Channel power limits for BLE PHYs were not always being respected. This could have caused us to use a power which might result in certification issues.
RAIL_StateBuffer_t type was incorrectly sized resulting in a waste of RAM for RAIL applications. This has now been trimmed down to the actual size required.
- Packet receive APIs were totally revamped to allow faster and out-of-order deferred processing of received packets and their data outside of interrupt/callback context. Gone are RAIL_GetRxPacketHandle(), RAIL_ReadRxFifoAppendedInfo(), and the memory management RAILCb_ callbacks, replaced with RAIL_GetRxPacketInfo() that provides pointers directly to the received data held in RAIL's internal receive FIFO buffer allowing for zero-copy operation. See other RAIL 2.x porting documentation and new routines RAIL_GetRxPacketInfo(), RAIL_GetRxPacketDetails(), RAIL_HoldRxPacket(), and RAIL_ReleaseRxPacket(), along with updated RAIL_PeekRxPacket() and RAIL_ReadRxFifo() behavior.
- On the transmit side, zero-copy is also now supported by allowing applications to specify their own buffers for the transmit FIFO, eliminating RAIL's former internal fixed-size 512-byte one. See new RAIL_SetTxFifo().
- The former RAIL_LoadTxData() has been merged into an updated RAIL_WriteTxFifo() API.
- The RAIL_Event_t type was renamed RAIL_Events_t now that multiple events can be presented to the application simultaneously in RAIL's generic events callback, rather than relying on the internal arbitrary order that RAIL imposed previously, which may not match the application's or protocol's expectations.
- Event/callback configuration is now managed entirely by RAIL_ConfigEvents(), eliminating the old RAIL_ConfigTx() and RAIL_SetCallbackConfig() APIs.
- Channel numbers were increased in range from 8 bits to 16 bits, and channel configurations made much more flexible allowing for multi-band radio configurations and an easy way to specify TX power limits on certain channels that otherwise share a common configuration. See new APIs RAIL_GetActiveChannelConfig() and RAIL_GetActiveChannelConfigEntry() along with changes to RAIL_ConfigChannels().
- Power levels were given a formal RAIL_TxPowerLevel_t type, and RAIL_SetTxPower() now returns a RAIL_Status_t not the power level actually achieved – must now use RAIL_GetTxPower() to get that.
- PA power curves and the conversion between RAIL power level and dBm have been fully abstracted to live outside of RAIL, allowing customers complete flexibility to characterize their designs and PA selection. See new APIs RAIL_ConfigTxPower(), RAIL_ConvertDbmToRaw(), RAIL_ConvertRawToDbm(), RAIL_GetTxPowerConfig(), RAIL_GetTxPowerDbm(), RAIL_SetTxPowerDbm(), and RAIL_EnablePaCal().
- Protocols using Frame Types to determine packet length are better integrated into the Studio radio configurator and channel configuration. Gone are APIs like RAIL_ConfigFrameTypeLength() and RAIL_EnableAddressFilterByFrameType() whose functionality is now subsumed within channel configurations.
- APIs to support RAIL timebase synchronization across sleep/wake were added: RAIL_ConfigSleep(), RAIL_Sleep(), and RAIL_Wake().
- State transitions for success and error are now encapsulated in a new RAIL_StateTransitions_t structure. This affected the RAIL_SetRxTransitions() and RAIL_SetTxTransitions() routines.
- The former RAIL_EVENT_TX_BUFFER_UNDERFLOW has been broken out into non-ACK (RAIL_EVENT_TX_UNDERFLOW) and ACK (RAIL_EVENT_TXACK_UNDERFLOW) flavors like the other transmit completion events.
- Diagnostic toning APIs were merged into the streaming APIs as the RAIL_StreamMode_t::RAIL_STREAM_CARRIER_WAVE.
- RAIL_ConfigCal() was revamped to use RAIL_CalMask_t.
- RAIL_Calibrate()'s bool calSave argument was removed, being redundant with a NULL vs. non-NULL calValues argument.
- Support for Packet Traffic Arbitration (PTA) or Coexistence was added in the form of an API to prevent transmits from going on the air: RAIL_EnableTxHoldOff(), along with RAIL_IsTxHoldOffEnabled() to check the current state.
- The former RAIL_AutoAckDisable() was merged into RAIL_ConfigAutoAck() by means of its RAIL_AutoAckConfig_t::enable parameter field.
- The former RAIL_EnableRxFifoThreshold() was replaced by using RAIL_ConfigEvents() to enable/disable the RAIL_EVENT_RX_FIFO_ALMOST_FULL event.
- The former blocking RAIL_PollAverageRssi() was eliminated; use the non-blocking RAIL_StartAverageRssi() instead.
- Several APIs were renamed for consistency and updated accordingly:
- More API functions were updated to take a RAIL_Handle_t argument: RAIL_SetFreqOffset(), RAIL_GetRxFreqOffset(), and the RAIL_IEEE802154_ protocol APIs.
- RAIL_IEEE802154_GetAddress() was updated to return RAIL_Status_t rather than RAIL_IEEE802154_Address_t which is now passed as an output argument.
- RAIL_EnableDirectMode() and RAIL_SetTune() now return RAIL_Status_t rather than void.
- A multiprotocol scheduler API was added to get its status: RAIL_GetSchedulerStatus().
- The RAILCb_AssertFailed() callback returns with a RAIL_Handle_t parameter that might be NULL since assert conditions might occur during initialization prior to handle assignment or during multiprotocol switching.
- Many APIs with pointer arguments were clarified to use const pointers where the API doesn't modify the data pointed to.
- All API names were updated to follow a strictly VerbNoun convention.
- RAIL_SetAbortScheduledTxDuringRx() is no longer a separate API, rather it was added to RAIL_ScheduleTxConfig_t. Set the desired TX during RX behavior when that struct is passed to RAIL_StartScheduledTx().
- Add support for building single-prototocol, multi-protocol, and core RAIL libraries.
- Changed RAIL_RadioState_t to a bitmask. Supported RAIL_RadioState_t bits are: RAIL_RF_STATE_ACTIVE, RAIL_RF_STATE_RX, and RAIL_RF_STATE_TX; combinations of these bits yield the additional states RAIL_RF_STATE_INACTIVE, RAIL_RF_STATE_IDLE, RAIL_RF_STATE_RX_ACTIVE, and RAIL_RF_STATE_TX_ACTIVE.
- Added RAIL_RX_OPTION_TRACK_ABORTED_FRAMES to configure seeing full packets via Packet Trace, even after they have been aborted.
- Added RAIL 15.4 PTI Rx error code UNDESIRED_ACK to indicate an ACK filtered because it did not have the desired sequence number matching that in the recently-transmitted ACK-requesting frame.
- Updated return type from uint8_t to RAIL_Status_t for many functions.
- Removed deprecated bit error-rate APIs RAIL_BerConfigSet(), RAIL_BerRxStart(), RAIL_BerRxStop(), RAIL_BerStatusGet(), along with deprecated types RAIL_BerConfig_t and RAIL_BerStatus_t.
- TX related events are now broken out to specify whether the event is relevant to an ACK packet or user-initiated TX. Specifically those are RAIL_EVENT_TX_ABORTED and RAIL_EVENT_TXACK_ABORTED, RAIL_EVENT_TX_BLOCKED and RAIL_EVENT_TXACK_BLOCKED, and RAIL_EVENT_TX_PACKET_SENT and RAIL_EVENT_TXACK_PACKET_SENT. One of each type (i.e. one ACK, one non-ACK) can occur before being handled.
- RAIL_StartTx() no longer takes a pre-TX operation function pointer to do scheduled or CCA transmits. Instead, there are now separate API's for each type of transmit: RAIL_StartTx(), RAIL_StartScheduledTx(), RAIL_StartCcaLbtTx(), RAIL_StartCcaCsmaTx().
- RAIL_TxOptions_t has been converted to a 32-bit bitmask, so that RX and TX options are both represented as bitmasks. A single TX option mask is passed into each TX call.
- RAIL_ConfigEvents() now also takes two bitmasks, one to indicate which events should be affected, and the second indicating which of those events should be enabled.
- Similarly, RAIL_ConfigRxOptions() takes two bitmasks, one to indicate which options to update, and the second indicating the desired value of those options, which affect all future receives.
- Options for removing RX appended info and ignoring CRC are now controlled exclusively by RAIL_ConfigRxOptions().
- Added new BLE radio configurations for EFR32xG13 parts to fix a transmit overshoot issue on the coded PHY configurations for BLE Long Range.
- Fixed DCDC voltage droop during RAIL_RfInit()
- Added an API (RAIL_EnablePaCal()) that enables loading of chip to chip PA calibration data.
- Fixed an issue where RAIL_RfStateGet() would mistakenly return RAIL_RF_STATE_IDLE instead of RAIL_RF_STATE_TX when a Transmit operation's LBT is active.
- Added an API (RAIL_SetAbortScheduledTxDuringRx) that sets the behavior when a scheduled TX fires during an RX or ACK. If the API is passed false, TX's will be delayed until the RX (or ACK to the RX) is complete. That behavior is the default and what always happened previously. Passing the function true however will abort scheduled TX's that fire during the RX (or ACK to the RX) and fire the RAILCb_TxRadioStatus callback.
- Added new RAILCb_AssertFailed callback to give the flexible handling of asserts within RAIL. This includes defines of assert codes and error reasons in
rail_assert_error_codes.h. The default implementation hangs in an infinite loop.
- Added RAIL_ENUM define to override enum size ambuiguity in the ARM EABI by making them actually a uint8_t. For documentation purposes they are still shown as enums.
- Added new TX options: removeCrc, to override whether CRC is sent; and syncWordId, to choose which SYNC word to transmit when multiple SYNC words are configured.
- Added new RX option: RAIL_RX_OPTION_ENABLE_DUALSYNC, which allows multiple SYNC words to be searched for on PHYs that support it.
- Added RAIL_PeekRxPacket to allow reading part of a packet before it has been fully received.
- Changed BER Test functionality in RAILTest such that if a RX overflow is detected (due to the incoming datarate being too high), the test now aborts and displays an appropriate status message.
- Fixed an issue where the code could hang in a RX overflow state when receiving incoming data streams.
- RAIL_TxToneStart() and RAIL_TxStreamStart() now idle the radio before transmitting.
- Fixed an issue where calling RAIL_TimerSet() while in the middle of a stream or tone transmission could lock up the radio.
- Added new frequency offset related functions, RAIL_GetRxFreqOffset and RAIL_SetFreqOffset, and the associated RAIL_FrequencyOffset_t type definition.
- Fixed an issue in 1.5.1 that would cause scheduled receive, scheduled transmit, and RAIL timer operations to fail on EFR32xG12 with a relative delay of 0.
- Fixed an issue in 1.5.1 that would cause scheduled receive and scheduled transmit to fail if called with an absolute time from [0, rxWarmTime) or [0, txWarmTime) respectively.
- Fixed an issue where a failed scheduled transmit operation would prevent any transmit from succeeding until RAIL_RfIdle() or RAIL_RfIdleExt() were called.
- Fixed an issue in 1.5.1 where calling idle while looking for an ACK could cause the radio to get stuck in the receive state.
- Added official support for the EFR32xG12 parts through a new librail_efr32xg12.a version of the library.
- Added RAIL_SetRxOptions API for configuration of receive options, such as RAIL_RX_OPTION_STORE_CRC.
- Increase transmit and receive fifo sizes to 512 bytes for all EFR32xG1 parts. This impacts both packet and fifo modes.
- Added RAIL_RxDataSource_t::RX_DEMOD_DATA in order to receive demodulated data via FIFO method.
- Shortened the duration that the transmit buffer lock in RAIL_TxDataLoad() is held, as it was overprotective. RAIL will still report an error if the application attempts to manipulate the transmit buffer while actively transmitting data.
- Improved state transition timings for enhanced precision and accuracy. To improve precision we have switched to a more stable receive complete event since our previous trigger could jitter for certain radio configurations. To improve accuracy we measured and removed PHY specific overhead for BLE applications. Note that this measurement was BLE specific and does not completely correct accuracy on any arbitrary PHY configuration. For custom PHY configurations you will still have to manually calibrate out any offsets by measurement and any previous measurements are likely different now.
- Moved BER test implementation out of the RAIL library and into RAILTest. Deprecated the existing BER test functions in the RAIL API. With BER test code now existing in RAILTest, you must use version 2.2.1 or later of the radio configurator.
- Disabled receive buffer overflow and transmit buffer underflow as BUFC_IRQHandler() events. These events now only occur in FRC_IRQHandler().
- Sped up RAIL transmit and receive buffer read/write operations.
- Fixed a race condition that could cause the receive packet callback to be delayed until the next receive packet event.
- Added other methods of Data Management. The application can configure RAIL to provide/retrieve data via FIFO method.
- The new FIFO method of data management brings with it two new callbacks: RAILCb_TxFifoAlmostEmpty(), and RAILCb_RxFifoAlmostFull(). Note that you must implement these new callbacks or stub them out if you do not intend to use them.
- Fixed a bug in how we handled IEEE 802.15.4 data request packets. Specifically, we were not issuing the RAILCb_IEEE802154_DataRequestCommand() callback for data request packets that were sent with MAC security enabled.
- Fixed a bug where calling RAIL_TxDataLoad() at an inopportune time could cause that and all subsequent such calls to fail.
- Implemented LQI measurement. The field in RAIL_AppendedInfo_t is now populated on every packet receive.
- Allow transmit while receive is active, if the channel is the same. After transmitting, the radio will follow the configured state transitions as before.
- Allow shorter ccaBackoff times if receive is active during the CSMA or LBT process.
- Allow calling RAIL_RxConfig while receiving.
- Added new receive event: RAIL_RX_CONFIG_PACKET_ABORTED
- Added new RAIL_TxConfig API, along with more transmit events: RAIL_TX_CONFIG_CHANNEL_CLEAR, RAIL_TX_CONFIG_CCA_RETRY, RAIL_TX_CONFIG_START_CCA
- Fixed a filtering bug in the IEEE 802.15.4 code. We were incorrectly filtering packets with a 0xFFFF source PANID while the coordinator which caused problems in the joining process. The new logic will only use the source PANID for filtering if we are the coordinator, there is no destination address, and the frame type is MAC command or Data.
- Migrated to Gecko SDK 5.0, including the new em_core APIs for interrupt enabling and disabling. This adds required dependencies on the CORE_EnterCritical() and CORE_ExitCritical() functions.
- Added new RSSI functions for hardware and software averaging: RAIL_StartAverageRSSI(), RAIL_GetAverageRSSI(), RAIL_AverageRSSIReady(), RAIL_PollAverageRSSI().
- Added new RSSI callback: RAILCb_RssiAverageDone().
- Added the ability to switch between multiple BLE phys, including 2Mbps phys, on chips that support the new phys.
- Added support for the EFR32MG12P part family with larger RAM and Flash size variants along with some new chip features.
- Renamed anything that was just efr32 in the previous releases to efr32xg1 to differentiate it from the new efr32xg12 family of parts.
- Add support for the new BLE 2MBit PHY to the BLE acceleration and configuration APIs on EFR32xG12 chips.
- Better optimize IR Calibration run times for all EFR32xG1 parts. You must use version 0.69 or later of the radio configurator.
- Added RAIL_SetPtiProtocol() and RAIL_PtiProtocol_t. This function allows the application to configure RAIL's packet trace interface to output protocol specific data.
- Fix BER functions to operate at 1Mbps data rates.
- RAIL_RfIdle() does not clear the transmit buffer anymore. RAIL_TxDataLoad() resets the transmit buffer with every packet set. This fixes the case where RAIL_RfIdle() is called after RAIL_TxDataLoad().
- Fixed bug when using fixed packet lengths configured via the Radio Configurator. RAIL_TxStart() will not overwrite the configured fixed length to the amount of data loaded by RAIL_TxDataLoad().
- Fixed bug in RADIO_PA_Init() where ramp times greater than 11.2 ms would be truncated to a very short ramp.
- Added IEEE 802.15.4 hardware acceleration. The new APIs can be found in
protocol/ieee802154/rail_ieee802154.h. Documentation for these APIs can be found in IEEE 802.15.4. This includes a new callback: RAILCb_IEEE802154_DataRequestCommand().
- Added Auto Ack hardware acceleration. Documentation for these APIs can be found in Auto-ACK.
- Added RAIL_TxStartWithOptions(). This new API takes a pointer to RAIL_TxOptions_t that contains options to modify the upcoming transmit.
- Increased minimum state transition time to 100 us.
- Added RAIL_STATUS_INVALID_CALL
- Added RAIL_AppendedInfo_t::isAck
- Added BLE hardware acceleration. The new APIs can be found in
protocol/ble/rail_ble.h. Documentation for these APIs can be found in BLE.
- Added RAIL_ScheduleRx() and RAIL_ScheduleRxConfig_t. This allows the application to schedule a RX window using the RAIL timebase.
- Added RAIL_TIME_DISABLED enum to RAIL_TimeMode_t.
- Added an extended idle function which gives you more control of how the radio is idled. See RAIL_RfIdleExt() and RAIL_RfIdleMode_t for more details.
- Added RAIL_RX_CONFIG_TIMEOUT and RAIL_RX_CONFIG_SCHEDULED_RX_END
- Added RAIL_TX_CONFIG_TX_ABORTED and RAIL_TX_CONFIG_TX_BLOCKED
- Added an extended radio status callback that supports up to 32 different status reasons (RAILCb_RxRadioStatusExt()). You may implement this instead of RAILCb_RxRadioStatus() or continue using the old version if you do not need access to more than the first 8 status values.
- Added FEM control signals
- Added RAIL_SetPaCTune in order to tune the PA capacitor value for TX and RX.
- Fix typo in RAIL_StreamMode_t : PSUEDO_RANDOM_STREAM to PSEUDO_RANDOM_STREAM
- Added ability to reset demod.
- Fixed register settings for BER testing.
- Fixed packet buffer for contents larger than 170 bytes.
- Presented worst case RfSense wake period
- Optimized address filtering code for operation at higher data rates.
- Clarified data rate limitations of address filtering.
- Added RAIL_SetTime() in order to allow the user to change the RAIL timebase with microsecond granularity.
- Removed sprurious calls to RAIL_RxRadioStatus() with the RAIL_RX_CONFIG_BUFFER_OVERFLOW argument, which were happening when receive was aborted due to events such as address filtering failures.
- Fixed incorrect PA output power calculations.
- Allow RAIL_RxStart() and RAIL_TxStart() to not error if the radio is heading to idle after a call to RAIL_RfIdle(). Application code does not have to wait until the radio is completely idle before calling a receive or transmit operation as long as the radio is heading to idle.
- Fixed IR calibration such that calibration values are more accurate for radio configurations with datarates below 10Kbps.
- Fixed IR calibration such that the default calibration value is applied when a better calibration value is unable to be calculated.
- Added RAIL_CalInit() for calibration initialization.
- Added BER test API and structures for diagnostic use - RAIL_BerConfigSet(), RAIL_BerRxStart(), RAIL_BerRxStop(), RAIL_BerStatusGet(), RAIL_BerConfig_t, RAIL_BerStatus_t.
- Enabled DC Calibration during initialization.
- Fixed CCA timing to prevent invalid CCA failures when starting out of IDLE state.
- Fixed RX state transitions to TX when ignoring CRC errors. Will properly take the success route when a CRC error occurs while ignoring CRC errors.
- Fixed TX error state transition after CCA failure.
- RAIL_RX_CONFIG_INVALID_CRC changed to RAIL_RX_CONFIG_FRAME_ERROR
- This now accurately represents the callback flag.
- A frame error is either an invalid crc, a frame coding error, or a variable length error. On detection of a frame error, the radio will proceed to the defined error state.
- RAIL_SetRxTransitions() and RAIL_SetTxTransitions() APIs added
- Add ability to configure radio to automatically to transition to a given radio state on completion of a receive or transmit event.
- RAIL_SetStateTiming() API added
- State transition times can be configured. The given timestamps will not perfectly match on-air times, due to the RX and TX chain delays, which are dependent on the radio configuration.
- RAIL_AddressFilterByFrameType() added
- If address filtering and frame type length decoding are both enabled, this gives the ability to enable or disable address filtering per frame type
- Return quarter dBm resolution from RAIL_RxGetRSSI(). This changes the return value to an int16_t from an int8_t.
- Added calibration APIs (Calibration)
- The RAIL library will notify the application via callback, RAILCb_CalNeeded(), whenever it detects a calibration is needed.
- An API is provided allowing the application to choose when to calibrate the radio, to pass in a known calibration value, or force a calibration to occur.
- RAIL_TxPowerSet() returns the power level that can be set which might not match the requested power level.
Beta 1 - November 16, 2015
- Exposed EFR32 RF Energy Sensing capability via a RAIL API.
- This functionality allows the radio to be woken from sleep by a large amount of energy over the air.
- Added new RAIL Timer APIs (System Timing)
- This provides access to a hardware timer running at the RAIL timebase. You can use this to implement simple protocol timing that may be needed by your low level radio code.
- This change also adds a new RAILCb_TimerExpired() that must be implemented by your application.
- Added APIs to access the bit rate and symbol rate for the current PHY (RAIL_BitRateGet(), RAIL_SymbolRateGet()).
- Cleaned up RAIL type names so that they all begin with the RAIL_ prefix. This will require updates to existing application code.
- Initial integration with Simplicity Studio's application builder tools
Alpha 2 - September 14, 2015
- Filtering of receive packets based on defined address fields and compare values. See Address Filtering for more details.
- Added different Pre-Transmit options for the Tx function.
- Scheduling of packet transmission at an absolute time or after a defined delay.
- Packet transmission conditional on Clear Channel Assessment (CSMA, LBT).
- The ability to read RSSI manually with RAIL_RxGetRSSI().
- Support for building RAIL applications using both GCC and IAR toolchains.
- Initial release with support for transmit receive and basic radio configuration.