mirror of
https://github.com/oliverschmidt/contiki.git
synced 2024-11-08 23:08:29 +00:00
832 lines
27 KiB
C
832 lines
27 KiB
C
|
/*
|
||
|
* File: stack/phy/phy-library.h
|
||
|
* Description: Interface definition for library functionality.
|
||
|
*
|
||
|
* <!--(C) COPYRIGHT 2010 STMicroelectronics. All rights reserved. -->
|
||
|
*/
|
||
|
|
||
|
#include "stm32w108_type.h"
|
||
|
|
||
|
//---------------------------------------------------------------------------
|
||
|
// Definitions
|
||
|
//------------
|
||
|
|
||
|
/**
|
||
|
* @name SIMPLEMAC version defines
|
||
|
*@{
|
||
|
*/
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @brief Version major number
|
||
|
*/
|
||
|
#define SIMPLEMAC_VERSION_MAJOR 1
|
||
|
|
||
|
/**
|
||
|
* @brief Version minor number
|
||
|
*/
|
||
|
#define SIMPLEMAC_VERSION_MINOR 0
|
||
|
|
||
|
/**
|
||
|
* @brief Version patch number
|
||
|
*/
|
||
|
#define SIMPLEMAC_VERSION_PATCH 0
|
||
|
|
||
|
/**
|
||
|
* @brief Version qualifier
|
||
|
*/
|
||
|
#define SIMPLEMAC_VERSION_QUAL ""
|
||
|
|
||
|
#define _SQUOTEME(a) #a
|
||
|
#define SQUOTEME(a) _SQUOTEME(a)
|
||
|
|
||
|
/**
|
||
|
* @brief Version string
|
||
|
*/
|
||
|
#define SIMPLEMAC_VERSION_STRING SQUOTEME(SIMPLEMAC_VERSION_MAJOR) "." SQUOTEME(SIMPLEMAC_VERSION_MINOR) "." SQUOTEME(SIMPLEMAC_VERSION_PATCH) SIMPLEMAC_VERSION_QUAL
|
||
|
|
||
|
//@} \\END SIMPLEMAC version defines
|
||
|
|
||
|
|
||
|
#define SECURITY_BLOCK_SIZE 16 // bytes
|
||
|
#define MIN_RADIO_POWER -43 // dBm
|
||
|
#define MAX_RADIO_POWER 3 // dBm
|
||
|
|
||
|
#ifndef __PHY_H__
|
||
|
enum {
|
||
|
ST_RADIO_POWER_MODE_RX_ON,
|
||
|
ST_RADIO_POWER_MODE_OFF
|
||
|
};
|
||
|
typedef u8 RadioPowerMode;
|
||
|
|
||
|
//---------------------------------------------------------------------------
|
||
|
// Transmit Configuration
|
||
|
//-----------------------
|
||
|
// The application must declare this structure and initialize each member
|
||
|
// variable. radioTransmitConfig must be initialized prior to calling
|
||
|
// ST_RadioTransmit() and may be modified only while no transmit operation is
|
||
|
// in progress.
|
||
|
|
||
|
#define RADIO_CCA_ATTEMPT_MAX_DEFAULT 4
|
||
|
#define RADIO_BACKOFF_EXPONENT_MIN_DEFAULT 3
|
||
|
#define RADIO_BACKOFF_EXPONENT_MAX_DEFAULT 5
|
||
|
|
||
|
typedef struct {
|
||
|
boolean waitForAck; // Wait for ACK if ACK request set in FCF.
|
||
|
boolean checkCca; // backoff and check CCA before transmit.
|
||
|
u8 ccaAttemptMax; // The number of CCA attempts before failure;
|
||
|
u8 backoffExponentMin; // Backoff exponent for the initial CCA attempt.
|
||
|
u8 backoffExponentMax; // Backoff exponent for the final CCA attempt(s).
|
||
|
boolean appendCrc; // Append CRC to transmitted packets.
|
||
|
} RadioTransmitConfig;
|
||
|
#endif// __PHY_H__
|
||
|
|
||
|
#ifndef ST_TYPES_H
|
||
|
/**
|
||
|
* @name txPowerModes for stSetTxPowerMode and mfglibSetPower
|
||
|
*/
|
||
|
//@{
|
||
|
|
||
|
/** @brief The application should call ::stSetTxPowerMode() with the
|
||
|
* txPowerMode parameter set to this value to disable all power mode options,
|
||
|
* resulting in normal power mode and bi-directional RF transmitter output.
|
||
|
*/
|
||
|
#define ST_TX_POWER_MODE_DEFAULT 0x0000
|
||
|
/** @brief The application should call ::stSetTxPowerMode() with the
|
||
|
* txPowerMode parameter set to this value to enable boost power mode.
|
||
|
*/
|
||
|
#define ST_TX_POWER_MODE_BOOST 0x0001
|
||
|
/** @brief The application should call ::stSetTxPowerMode() with the
|
||
|
* txPowerMode parameter set to this value to enable the alternate transmitter
|
||
|
* output.
|
||
|
*/
|
||
|
#define ST_TX_POWER_MODE_ALTERNATE 0x0002
|
||
|
/** @brief The application should call ::stSetTxPowerMode() with the
|
||
|
* txPowerMode parameter set to this value to enable both boost mode and the
|
||
|
* alternate transmitter output.
|
||
|
*/
|
||
|
#define ST_TX_POWER_MODE_BOOST_AND_ALTERNATE (ST_TX_POWER_MODE_BOOST \
|
||
|
|ST_TX_POWER_MODE_ALTERNATE)
|
||
|
#ifndef DOXYGEN_SHOULD_SKIP_THIS
|
||
|
// The application does not ever need to call stSetTxPowerMode() with the
|
||
|
// txPowerMode parameter set to this value. This value is used internally by
|
||
|
// the stack to indicate that the default token configuration has not been
|
||
|
// overidden by a prior call to stSetTxPowerMode().
|
||
|
#define ST_TX_POWER_MODE_USE_TOKEN 0x8000
|
||
|
#endif//DOXYGEN_SHOULD_SKIP_THIS
|
||
|
//@} \\END Definitions
|
||
|
|
||
|
/**
|
||
|
* @brief The maximum 802.15.4 channel number is 26.
|
||
|
*/
|
||
|
#define ST_MAX_802_15_4_CHANNEL_NUMBER 26
|
||
|
|
||
|
/**
|
||
|
* @brief The minimum 802.15.4 channel number is 11.
|
||
|
*/
|
||
|
#define ST_MIN_802_15_4_CHANNEL_NUMBER 11
|
||
|
|
||
|
/**
|
||
|
* @brief There are sixteen 802.15.4 channels.
|
||
|
*/
|
||
|
#define ST_NUM_802_15_4_CHANNELS \
|
||
|
(ST_MAX_802_15_4_CHANNEL_NUMBER - ST_MIN_802_15_4_CHANNEL_NUMBER + 1)
|
||
|
|
||
|
#endif //ST_TYPES_H
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
//---------------------------------------------------------------------------
|
||
|
/** @name
|
||
|
* Radio power state control APIs
|
||
|
*
|
||
|
* @brief
|
||
|
* These APIs control the overall radio initialization and power state.
|
||
|
*/
|
||
|
//@{
|
||
|
|
||
|
/** @brief
|
||
|
* This function performs one-time radio initialization and calibration.
|
||
|
* This function must be called once after chip reset or wake from deep sleep.
|
||
|
* This function will power up the radio while it configures the radio channel.
|
||
|
* After the radio is configured and the channel is set the radio will be left
|
||
|
* in the state specified by the \c initialRadioPowerMode parameter.
|
||
|
* This function calls ST_RadioSetPowerMode(),
|
||
|
* ST_RadioEnableAddressFiltering(), ST_RadioEnableAutoAck(),
|
||
|
* ST_RadioSetCoordinator(), ST_RadioSetPower(), ST_RadioSetChannel(),
|
||
|
* ST_RadioEnablePacketTrace(), and ST_RadioEnableReceiveCrc()
|
||
|
* providing the last used argument for each function. If these functions have
|
||
|
* not been called before ST_RadioInit() then the default for each is used.
|
||
|
* Only the functions listed above can be called before ST_RadioInit().
|
||
|
* All other library functions must not be called until after
|
||
|
* ST_RadioInit() has been called once after each chip reset or wake from deep
|
||
|
* sleep.
|
||
|
*
|
||
|
* @param
|
||
|
* initialRadioPowerMode specifies the state that the function will leave the
|
||
|
* radio in after it is configured. This parameter can be either:
|
||
|
* ST_RADIO_POWER_MODE_OFF - radio will be powered down.
|
||
|
* ST_RADIO_POWER_MODE_RX_ON - radio will be left in the on (receive) state.
|
||
|
*
|
||
|
* @return ::ST_SUCCESS or a status code indicating the reason for failure.
|
||
|
*/
|
||
|
StStatus ST_RadioInit(RadioPowerMode initialRadioPowerMode);
|
||
|
|
||
|
/** @brief
|
||
|
* Turns on the radio. The last radio configuration is used.
|
||
|
*/
|
||
|
void ST_RadioWake(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function turns off the radio.
|
||
|
* Any transmit or receive packets in progress are aborted.
|
||
|
* The library may or may not call ST_RadioTransmitCompleteIsrCallback() for an
|
||
|
* aborted transmit packet.
|
||
|
* ST_RadioWake() must not be called within 250us of having called
|
||
|
* ST_RadioSleep().
|
||
|
*/
|
||
|
void ST_RadioSleep(void);
|
||
|
|
||
|
//@}//END Radio power state control APIs
|
||
|
|
||
|
|
||
|
//---------------------------------------------------------------------------
|
||
|
/** @name
|
||
|
* Channel APIs
|
||
|
*
|
||
|
* @brief
|
||
|
* These APIs control channel selection and calibration.
|
||
|
*/
|
||
|
//@{
|
||
|
|
||
|
/** @brief
|
||
|
* Configures the radio to communicate on a 802.15.4 channel.
|
||
|
* If ST_RadioInit() has not been called yet, the channel number is recorded
|
||
|
* but no calibration takes place. The specified channel will be configured
|
||
|
* when ST_RadioInit() is eventually called.
|
||
|
* If the radio is asleep this function will wake it to perform channel
|
||
|
* calibration and then return it to sleep before exiting.
|
||
|
* The first time a channel is selected all radio parameters will be calibrated
|
||
|
* for that channel. This full calibration process can take up to 200ms to
|
||
|
* complete. The results of some of these calibrations are stored in flash
|
||
|
* tokens for use the next time the same channel is selected. Subsequent calls
|
||
|
* to ST_RadioSetChannel() requesting the same channel will take less time
|
||
|
* because the stored values will be retrieved from the flash tokens and reused.
|
||
|
*
|
||
|
* @param channel the 802.15.4 channel that the radio will communicate on.
|
||
|
*
|
||
|
* @return ::ST_SUCCESS or a status code indicating the reason for failure.
|
||
|
*/
|
||
|
StStatus ST_RadioSetChannel(u8 channel);
|
||
|
|
||
|
/** @brief
|
||
|
* This function gets the 802.15.4 channel that the radio is configured to use.
|
||
|
*
|
||
|
* @return the 802.15.4 channel that the radio is configured to use.
|
||
|
*/
|
||
|
u8 ST_RadioGetChannel(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function is identical to ST_RadioSetChannel() except that it
|
||
|
* calibrates all radio parameters regardless of whether calibration is
|
||
|
* required.
|
||
|
*
|
||
|
* NOTE: This function does not need to be called under normal operating
|
||
|
* conditions. The library will reuse available stored calibration values
|
||
|
* and will perform necessary re-calibration automatically. Calling this
|
||
|
* function will cause the library to calibrate all radio parameters and
|
||
|
* store the results in flash, overwriting previous stored values. Use of
|
||
|
* this function will cause unnecessary flash wear and will take longer to
|
||
|
* complete than a call to ST_RadioSetChannel(). This function should only
|
||
|
* be called to recover from hardware-related calibration problems, which
|
||
|
* should only occur during hardware development.
|
||
|
*
|
||
|
* @param channel the 802.15.4 channel that the radio will communicate on.
|
||
|
*
|
||
|
* @return ::ST_SUCCESS or a status code indicating the reason for failure.
|
||
|
*/
|
||
|
StStatus ST_RadioSetChannelAndForceCalibration(u8 channel);
|
||
|
|
||
|
/** @brief
|
||
|
* This function checks to see if the radio needs calibrating to maintain
|
||
|
* expected performance as environmental conditions change.
|
||
|
* If this function indicates that the calibration is needed, the application
|
||
|
* should call ST_RadioCalibrateCurrentChannel().
|
||
|
*
|
||
|
* NOTE: This function must not be called while a transmit is in progress.
|
||
|
*
|
||
|
* @return TRUE if calibration is needed to compensate for temperature changes,
|
||
|
* FALSE otherwise.
|
||
|
*/
|
||
|
boolean ST_RadioCheckRadio(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function performs necessary recalibration to counteract the effects of
|
||
|
* temperature changes since the last calibration. It should be called by the
|
||
|
* application when ST_RadioCheckRadio() indicates that calibration is needed.
|
||
|
*/
|
||
|
void ST_RadioCalibrateCurrentChannel(void);
|
||
|
|
||
|
//@}//END Channel APIs
|
||
|
|
||
|
|
||
|
//---------------------------------------------------------------------------
|
||
|
/** @name
|
||
|
* Transmit APIs
|
||
|
*
|
||
|
* @brief
|
||
|
* These APIs control the transmission of packets.
|
||
|
*/
|
||
|
//@{
|
||
|
|
||
|
/** @brief
|
||
|
* This function transmits a packet using the configuration specified in
|
||
|
* \c radioTransmitConfig.
|
||
|
*
|
||
|
* @param *packet A pointer to the packet to be transmitted. The first byte of
|
||
|
* \c packet must be set to the number of payload bytes to be transmitted.
|
||
|
* If \c radioTransmitConfig.appendCrc is TRUE the length byte must accommodate
|
||
|
* the hardware-appended two-byte CRC.
|
||
|
* e.g. A packet with a two-byte payload would be represented in memory as:
|
||
|
* {0x04, 0x00, 0x01, 0xc0, 0xc1} where 0xc0 and 0xc1 are the CRC bytes.
|
||
|
* If \c radioTransmitConfig.checkCca is TRUE this function performs CSMA-CA
|
||
|
* backoff(s) and CCA check(s) before transmitting, else it starts the
|
||
|
* transmit process immediately.
|
||
|
*
|
||
|
* @return ::ST_SUCCESS if the transmission process is successfully started.
|
||
|
* In this case ST_RadioTransmitCompleteIsrCallback() will eventually be
|
||
|
* called to indicate the completion status. If the radio is busy transmitting,
|
||
|
* this function returns an error code and
|
||
|
* ST_RadioTransmitCompleteIsrCallback() will not be called.
|
||
|
*/
|
||
|
StStatus ST_RadioTransmit(u8* packet);
|
||
|
|
||
|
/** @brief
|
||
|
* This function is called by the library once after each ST_RadioTransmit()
|
||
|
* call that returned successfully. If the ST_RadioTransmit() call returned
|
||
|
* an error ST_RadioTransmitCompleteIsrCallback() will not be called.
|
||
|
*
|
||
|
* NOTE: ST_RadioTransmit() can be called again within the context of this
|
||
|
* callback.
|
||
|
*
|
||
|
* @param status parameter indicates one of the following conditions:
|
||
|
* ::ST_SUCCESS - the last byte of the non-ACK-request packet has been
|
||
|
* transmitted.
|
||
|
* ::ST_PHY_ACK_RECEIVED - the requested ACK was received.
|
||
|
* ::ST_MAC_NO_ACK_RECEIVED - the requested ACK was not received in time.
|
||
|
* ::ST_PHY_TX_CCA_FAIL - unable to transmit due to lack of clear channel on
|
||
|
* all attempts.
|
||
|
* ::ST_PHY_TX_UNDERFLOW - DMA underflow occurred while transmitting. Should
|
||
|
* never happen.
|
||
|
* ::ST_PHY_TX_INCOMPLETE - The PLL synthesizer failed to lock while
|
||
|
* transmitting. Should never happen.
|
||
|
*
|
||
|
* @param sfdSentTime the value of the MAC timer captured when the SFD was sent.
|
||
|
*
|
||
|
* @param framePending TRUE if the received ACK indicates that data is
|
||
|
* pending for this node, FALSE otherwise.
|
||
|
*/
|
||
|
extern void ST_RadioTransmitCompleteIsrCallback(StStatus status,
|
||
|
u32 sfdSentTime,
|
||
|
boolean framePending);
|
||
|
|
||
|
/** @brief
|
||
|
* This function sets the Energy Detection Clear Channel Assessment threshold.
|
||
|
*
|
||
|
* @param threshold the energy level in dBm below which the channel will be
|
||
|
* considered clear.
|
||
|
*/
|
||
|
void ST_RadioSetEdCcaThreshold(s8 threshold);
|
||
|
|
||
|
/** @brief
|
||
|
* This function get the Energy Detection Clear Channel Assessment threshold.
|
||
|
*
|
||
|
* @return the Energy Detection Clear Channel Assessment threshold in units of
|
||
|
* dBm.
|
||
|
*/
|
||
|
s8 ST_RadioGetEdCcaThreshold(void);
|
||
|
|
||
|
/** @brief This function enables or disables notification of the SFD sent event
|
||
|
* via the ST_RadioSfdSentIsrCallback().
|
||
|
*
|
||
|
* @param enable TRUE if the notification is to be enabled, FALSE if the
|
||
|
* notification is to be disabled.
|
||
|
*/
|
||
|
void ST_RadioEnableSfdSentNotification(boolean enable);
|
||
|
|
||
|
/** @brief
|
||
|
* This function indicates whether the SFD sent notification via
|
||
|
* \c ST_RadioSfdSentIsrCallback() is enabled or disabled.
|
||
|
*
|
||
|
* @return TRUE if the SFD sent notification is enabled, FALSE otherwise.
|
||
|
*/
|
||
|
boolean ST_RadioSfdSentNotificationEnabled(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function is called by the library in response to an SFD sent event if
|
||
|
* this notification has been enabled by a call to
|
||
|
* \c ST_RadioEnableSfdSentNotification().
|
||
|
*
|
||
|
* NOTE: This callback is called for ACKs as well as normal packets.
|
||
|
*
|
||
|
* NOTE: In cases of extreme interrupt latency it is possible that
|
||
|
* \c sfdSentTime may contain the SFD time of the last received packet instead
|
||
|
* of the time of the last transmitted packet.
|
||
|
*
|
||
|
* @param sfdSentTime the value of the MAC timer when the SFD was sent in the
|
||
|
* last transmitted packet.
|
||
|
*/
|
||
|
void ST_RadioSfdSentIsrCallback(u32 sfdSentTime);
|
||
|
|
||
|
/** @brief
|
||
|
* This function sets the radio transmit power to a new level within the minimum
|
||
|
* and maximum values specified in the datasheet for the specific device.
|
||
|
*
|
||
|
* NOTE: It is possible for this function to succeed and set the power level to
|
||
|
* a value other than that specified in the \c power parameter. The reason for
|
||
|
* for this behavior is that not all integer power levels are available at lower
|
||
|
* power levels. When a specific power level is not available the next higher
|
||
|
* power level is used.
|
||
|
*
|
||
|
* @return ::ST_SUCCESS if the power level has been changed, or an error
|
||
|
* status code if not (e.g. if the requested value is out of range).
|
||
|
*
|
||
|
* @param power the desired power level in units of dBm.
|
||
|
*/
|
||
|
StStatus ST_RadioSetPower(s8 power);
|
||
|
|
||
|
/** @brief
|
||
|
* This function gets the radio transmit power level.
|
||
|
*
|
||
|
* @return the radio transmit power level in units of dBm.
|
||
|
*/
|
||
|
s8 ST_RadioGetPower(void);
|
||
|
|
||
|
//@}//END Transmit APIs
|
||
|
|
||
|
|
||
|
//---------------------------------------------------------------------------
|
||
|
/** @name
|
||
|
* Receive APIs
|
||
|
*
|
||
|
* @brief
|
||
|
* These APIs control the reception of packets.
|
||
|
*/
|
||
|
//@{
|
||
|
|
||
|
/** @brief
|
||
|
* This function is called by the library when a packet has been received.
|
||
|
*
|
||
|
* @param *packet points to the packet data beginning with the length byte.
|
||
|
* The CRC bytes will have been removed from the packet.
|
||
|
*
|
||
|
* @param ackFramePendingSet TRUE if the library set the Frame Pending bit in
|
||
|
* the hardware-generated MAC ACK to this packet, FALSE otherwise.
|
||
|
*
|
||
|
* @param time The value of the MAC timer when the SFD was received for this
|
||
|
* packet.
|
||
|
*
|
||
|
* @param errors The number of correlator errors in the packet.
|
||
|
*
|
||
|
* @param rssi The energy detected over the last 8 symbols of the packet in
|
||
|
* units of dBm.
|
||
|
*/
|
||
|
extern void ST_RadioReceiveIsrCallback(u8 *packet,
|
||
|
boolean ackFramePendingSet,
|
||
|
u32 time,
|
||
|
u16 errors,
|
||
|
s8 rssi);
|
||
|
|
||
|
/** @brief
|
||
|
* This function enables or disables address filtering on PAN ID, node ID, and
|
||
|
* EUI 64.
|
||
|
*
|
||
|
* NOTE: Address filtering is enabled by default.
|
||
|
*
|
||
|
* @param enable TRUE to enable address filtering, FALSE otherwise.
|
||
|
*/
|
||
|
void ST_RadioEnableAddressFiltering(boolean enable);
|
||
|
|
||
|
/** @brief
|
||
|
* This function gets the address filtering status of the device.
|
||
|
*
|
||
|
* @return TRUE if address filtering is enabled, FALSE otherwise.
|
||
|
*/
|
||
|
boolean ST_RadioAddressFilteringEnabled(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function enables or disables automatic transmission of ACKs in response
|
||
|
* to received packets which request ACKs.
|
||
|
*
|
||
|
* NOTE: Address filtering must be enabled for automatic transmission of ACKs to
|
||
|
* occur.
|
||
|
*
|
||
|
* NOTE: Automatic acknowledgement is enabled by default.
|
||
|
*
|
||
|
* @param enable TRUE to enable automatic acknowledgement transmission, FALSE
|
||
|
* otherwise.
|
||
|
*/
|
||
|
void ST_RadioEnableAutoAck(boolean enable);
|
||
|
|
||
|
/** @brief
|
||
|
* This function gets the automatic acknowledgement status of the device.
|
||
|
*
|
||
|
* @return TRUE if automatic acknowledgement is enabled, FALSE otherwise.
|
||
|
*/
|
||
|
boolean ST_RadioAutoAckEnabled(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function sets the short address of the node.
|
||
|
*
|
||
|
* @param nodeId the 16-bit address to use for filtering short-addressed
|
||
|
* packets when address filtering is enabled.
|
||
|
*
|
||
|
*/
|
||
|
void ST_RadioSetNodeId(u16 nodeId);
|
||
|
|
||
|
/** @brief
|
||
|
* This function gets the short address of the node.
|
||
|
*
|
||
|
* @return nodeId the 16-bit address to use for filtering short-addressed
|
||
|
* packets.
|
||
|
*/
|
||
|
u16 ST_RadioGetNodeId(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function sets the PAN id of the node.
|
||
|
*
|
||
|
* @param panId the 16-bit PAN id to use for filtering packets when address
|
||
|
* filtering is enabled.
|
||
|
*/
|
||
|
void ST_RadioSetPanId(u16 panId);
|
||
|
|
||
|
/** @brief
|
||
|
* This function gets the PAN id of the node.
|
||
|
*
|
||
|
* @return 16-bit PAN id to use for filtering packets when address
|
||
|
* filtering is enabled.
|
||
|
*/
|
||
|
u16 ST_RadioGetPanId(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function get the EUI 64 of the node.
|
||
|
*
|
||
|
* NOTE: The EUI 64 is set via manufacturing tokens (See the Programming and
|
||
|
* Serialization Specification for details).
|
||
|
*
|
||
|
* @return the memory address of the 64-bit EUI address to use for filtering
|
||
|
* long-addressed packets when address filtering is enabled.
|
||
|
*/
|
||
|
u8* ST_RadioGetEui64(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function is called by the library after the long address fields of a
|
||
|
* packet have been received. The library will set the frame pending bit in the
|
||
|
* outgoing ACK only if the return value is TRUE. The application must lookup
|
||
|
* the \c eui64 in its own data structures and return TRUE if there is data
|
||
|
* pending, FALSE otherwise. It is critical that this function complete as
|
||
|
* quickly as possible to ensure the frame pending bit can be set before the ACK
|
||
|
* is transmitted.
|
||
|
*
|
||
|
* @return TRUE if the frame pending bit should be set in the outgoing ACK.
|
||
|
*/
|
||
|
boolean ST_RadioDataPendingLongIdIsrCallback(u8* longId);
|
||
|
|
||
|
/** @brief
|
||
|
* This function is called by the library after the short address fields of a
|
||
|
* packet have been received. The library will set the frame pending bit in the
|
||
|
* outgoing ACK only if the return value is TRUE. The application must lookup
|
||
|
* \c shortId in its own data structures and return TRUE if there is data
|
||
|
* pending, FALSE otherwise. It is critical that this function complete as
|
||
|
* quickly as possible to ensure the frame pending bit can be set before the ACK
|
||
|
* is transmitted.
|
||
|
*
|
||
|
* @return TRUE if the frame pending bit should be set in the outgoing ACK.
|
||
|
*/
|
||
|
boolean ST_RadioDataPendingShortIdIsrCallback(u16 shortId);
|
||
|
|
||
|
/** @brief
|
||
|
* This function sets or clears coordinator mode for this node. A
|
||
|
* coordinator is able to receive 802.15.4. DATA frames that have no destination
|
||
|
* address. A node that is not a coordinator will not receive these packets.
|
||
|
*
|
||
|
* NOTE: The source PAN id of the DATA frame with no destination address must
|
||
|
* still match the node PAN id in order for it to be received by the
|
||
|
* coordinator node.
|
||
|
*
|
||
|
* NOTE: A node is not a coordinator by default.
|
||
|
*
|
||
|
* @param coordinator TRUE to enable coordinator mode, FALSE to disable
|
||
|
* coordinator mode.
|
||
|
*/
|
||
|
void ST_RadioSetCoordinator(boolean coordinator);
|
||
|
|
||
|
/** @brief
|
||
|
* This function gets the coordinator status of the node.
|
||
|
*
|
||
|
* @return TRUE if the node is configured as a coordinator, FALSE otherwise.
|
||
|
*/
|
||
|
boolean ST_RadioDeviceIsCoordinator(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function enables or disables notification of DMA receive buffer overflow
|
||
|
* events via ST_RadioOverflowIsrCallback().
|
||
|
*
|
||
|
* @param enable TRUE to enable overflow notification, FALSE otherwise.
|
||
|
*/
|
||
|
void ST_RadioEnableOverflowNotification(boolean enable);
|
||
|
|
||
|
/** @brief
|
||
|
* This function indicates whether the overflow notification via
|
||
|
* ST_RadioOverflowIsrCallback() is enabled or disabled.
|
||
|
*
|
||
|
* @return TRUE if overflow notification is enabled, FALSE otherwise.
|
||
|
*/
|
||
|
boolean ST_RadioOverflowNotificationEnabled(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function is called by the library in response to a receive overflow
|
||
|
* event if this notification is enabled by a call to
|
||
|
* ST_RadioEnableOverflowNotification().
|
||
|
*/
|
||
|
void ST_RadioOverflowIsrCallback(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function enables or disables discarding received packets that fail the
|
||
|
* Cyclic Redundancy Check.
|
||
|
*
|
||
|
* NOTE: When this option is enabled the library automatically strips the CRC
|
||
|
* bytes off of packets that pass CRC check.
|
||
|
*
|
||
|
* NOTE: Discarding packets that fail CRC is enabled by default.
|
||
|
*
|
||
|
* @param enable TRUE to enable discarding packets that fail CRC, FALSE
|
||
|
* otherwise.
|
||
|
*/
|
||
|
void ST_RadioEnableReceiveCrc(boolean enable);
|
||
|
|
||
|
/** @brief
|
||
|
* This function gets the receive CRC configuration of the node.
|
||
|
*
|
||
|
* @return TRUE if received packets that fail CRC will be discarded, FALSE
|
||
|
* otherwise.
|
||
|
*/
|
||
|
boolean ST_RadioReceiveCrcEnabled(void);
|
||
|
|
||
|
//@}//END Receive APIs
|
||
|
|
||
|
|
||
|
//---------------------------------------------------------------------------
|
||
|
/** @name
|
||
|
* MAC Timer APIs
|
||
|
*
|
||
|
* @brief
|
||
|
* These APIs expose an interface to the MAC Timer.
|
||
|
* The MAC timer is 20-bits long with each LSB tick representing 1us.
|
||
|
* The MAC timer rolls over to zero approximately once every second.
|
||
|
* The MAC timer is free-running from the time that ST_RadioInit() is called.
|
||
|
*/
|
||
|
//@{
|
||
|
|
||
|
/** @brief
|
||
|
* This function gets an instantaneous reading of the MAC timer.
|
||
|
*
|
||
|
* @return the current value of the MAC timer.
|
||
|
*/
|
||
|
u32 ST_RadioGetMacTimer(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function enables or disables comparison of the MAC timer against an
|
||
|
* application-supplied value and notification via
|
||
|
* ST_RadioMacTimerCompareIsrCallback().
|
||
|
*
|
||
|
* @param enable TRUE to enable MAC timer comparison and notification via a
|
||
|
* callback.
|
||
|
*/
|
||
|
void ST_RadioEnableMacTimerCompare(boolean enable);
|
||
|
|
||
|
/** @brief
|
||
|
* This function indicates whether MAC timer comparison and callback
|
||
|
* notification are enabled or disabled.
|
||
|
*
|
||
|
* @return TRUE if MAC timer comparison and notification are enabled, FALSE
|
||
|
* otherwise.
|
||
|
*/
|
||
|
boolean ST_RadioMacTimerCompareEnabled(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function sets the value to compare against the MAC timer.
|
||
|
*
|
||
|
* @param value the value to compare against the MAC timer.
|
||
|
*/
|
||
|
void ST_RadioSetMacTimerCompare(u32 value);
|
||
|
|
||
|
/** @brief
|
||
|
* This function gets the value to compare against the MAC timer.
|
||
|
*
|
||
|
* @return the value to compare against the MAC timer.
|
||
|
*/
|
||
|
u32 ST_RadioGetMacTimerCompare(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function is called by the library in response to MAC timer comparison
|
||
|
* event.
|
||
|
*/
|
||
|
extern void ST_RadioMacTimerCompareIsrCallback(void);
|
||
|
//@}//END MAC Timer APIs
|
||
|
|
||
|
|
||
|
//---------------------------------------------------------------------------
|
||
|
/** @name
|
||
|
* Cryptography APIs
|
||
|
*
|
||
|
* @brief
|
||
|
* These APIs provide an interface to the hardware AES coprocessor.
|
||
|
*/
|
||
|
//@{
|
||
|
|
||
|
/** @brief
|
||
|
* This function sets the key to use during AES encryption.
|
||
|
*
|
||
|
* @param *key pointer to 128 bits of key data.
|
||
|
*/
|
||
|
void ST_AesSetKey(u8* key);
|
||
|
|
||
|
/**
|
||
|
* This function gets the key that is used during AES encryption.
|
||
|
*
|
||
|
* @param *key pointer to memory where 128 bits of key data will be written.
|
||
|
*/
|
||
|
void ST_AesGetKey(u8* key);
|
||
|
|
||
|
/** @brief
|
||
|
* This function encrypts the 128 bits of plaintext data located at \c block
|
||
|
* using the AES coprocessor previously configured by ST_AesSetKey().
|
||
|
* The resulting 128 bits of cyphertext are stored at \c block, overwriting
|
||
|
* the supplied plaintext.
|
||
|
*
|
||
|
* @param block pointer to memory containing the plaintext when this function is
|
||
|
* called and containing the cyphertext after this function has returned.
|
||
|
*/
|
||
|
void ST_AesEncrypt(u8* block);
|
||
|
|
||
|
//@}//END Cryptography APIs
|
||
|
|
||
|
|
||
|
//---------------------------------------------------------------------------
|
||
|
/** @name
|
||
|
* Miscellaneous APIs
|
||
|
*
|
||
|
* @brief
|
||
|
* These APIs control diagnostic and configuration functionality.
|
||
|
*/
|
||
|
//@{
|
||
|
|
||
|
/** @brief
|
||
|
* This function starts transmission of a carrier wave at the current channel
|
||
|
* center frequency. The carrier wave will be transmitted until
|
||
|
* ST_RadioStopTransmitTone() is called.
|
||
|
*
|
||
|
* NOTE: The radio must be idle (not transmitting) before entering this mode.
|
||
|
*
|
||
|
* NOTE: Other radio APIs must not be called while in this mode.
|
||
|
*/
|
||
|
void ST_RadioStartTransmitTone(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function stops transmission of carrier wave started by
|
||
|
* ST_RadioStartTransmitTone().
|
||
|
*/
|
||
|
void ST_RadioStopTransmitTone(void);
|
||
|
|
||
|
/** @brief
|
||
|
* this function starts transmission of a continuous stream of modulated data.
|
||
|
* No packet framing is present in this transmission. Random symbols will be
|
||
|
* transmitted until ST_RadioStopTransmitStream() is called.
|
||
|
*
|
||
|
* NOTE: The radio must be idle (not transmitting) before entering this mode.
|
||
|
*
|
||
|
* NOTE: Other radio APIs must not be called while in this mode.
|
||
|
*/
|
||
|
void ST_RadioStartTransmitStream(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function stops transmission of continuous stream of modulated data
|
||
|
* started by ST_RadioStartTransmitStream().
|
||
|
*/
|
||
|
void ST_RadioStopTransmitStream(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function gets a reading of the average energy detected over the previous
|
||
|
* eight symbol periods (128us total).
|
||
|
*
|
||
|
* @return the energy level detected in units of dBm.
|
||
|
*/
|
||
|
s8 ST_RadioEnergyDetection(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function accesses radio hardware to obtain true random numbers.
|
||
|
*
|
||
|
* @param *rn pointer to memory to hold \c count random numbers.
|
||
|
*
|
||
|
* @param count the number of 16-bit random numbers to get.
|
||
|
*/
|
||
|
void ST_RadioGetRandomNumbers(u16 *rn, u8 count);
|
||
|
|
||
|
/** @brief
|
||
|
* This function gets the clear or busy status of the channel.
|
||
|
*
|
||
|
* @return TRUE if channel is clear, FALSE if channel is busy.
|
||
|
*/
|
||
|
boolean ST_RadioChannelIsClear(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function enables or disables Packet Trace output.
|
||
|
* Before being enabled, the associated IO pins must be separately
|
||
|
* configured to allow for the packet trace peripheral to control the pins.
|
||
|
*
|
||
|
* NOTE: Packet Trace is on by default.
|
||
|
*
|
||
|
* @param enable TRUE to enable Packet Trace, FALSE otherwise.
|
||
|
*/
|
||
|
void ST_RadioEnablePacketTrace(boolean enable);
|
||
|
|
||
|
/** @brief
|
||
|
* This function indicates whether Packet Trace is enabled or not.
|
||
|
*
|
||
|
* @return TRUE if Packet Trace is enabled, FALSE otherwise.
|
||
|
*/
|
||
|
boolean ST_RadioPacketTraceEnabled(void);
|
||
|
|
||
|
/** @brief
|
||
|
* This function sets the radio power mode according to the bits
|
||
|
* encoded in \c powerMode.
|
||
|
*
|
||
|
* NOTE: The default power mode is whatever is configured in the PHY_CONFIG
|
||
|
* token (normal, bi-directional mode if not explicitly set otherwise.
|
||
|
*
|
||
|
* NOTE: It is preferable to set this configuration via the PHY_CONFIG token
|
||
|
* rather than using this API.
|
||
|
*
|
||
|
* @param txPowerMode encodes the power mode as follows:
|
||
|
* bit 0 set to 0: Normal mode.
|
||
|
* bit 0 set to 1: Boost mode.
|
||
|
* bit 1 set to 0: Use bi-directional transmit path.
|
||
|
* bit 1 set to 1: Use alternate transmit path.
|
||
|
*
|
||
|
* @return ::ST_SUCCESS always.
|
||
|
*/
|
||
|
StStatus ST_RadioSetPowerMode(u16 txPowerMode);
|
||
|
|
||
|
/** @brief
|
||
|
* This function gets the radio power mode.
|
||
|
*
|
||
|
* @return the radio power mode (boost/normal, bi-directional/alternate transmit
|
||
|
* path) encoded as bits in a 16-bit word (see ST_RadioSetPowerMode()
|
||
|
* documentation for details).
|
||
|
*/
|
||
|
u16 ST_RadioGetPowerMode(void);
|
||
|
|
||
|
//@}//END Miscellaneous APIs
|