| /* |
| * Copyright (c) 2017, The OpenThread Authors. |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * 3. Neither the name of the copyright holder nor the |
| * names of its contributors may be used to endorse or promote products |
| * derived from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
| * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| * POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #ifndef CC2650_RADIO_H_ |
| #define CC2650_RADIO_H_ |
| |
| #include <driverlib/rf_ieee_cmd.h> |
| |
| enum |
| { |
| IEEE802154_FRAME_TYPE_MASK = 0x7, ///< (IEEE 802.15.4-2006) PSDU.FCF.frameType |
| IEEE802154_FRAME_TYPE_ACK = 0x2, ///< (IEEE 802.15.4-2006) frame type: ACK |
| IEEE802154_ACK_REQUEST = (1 << 5), ///< (IEEE 802.15.4-2006) PSDU.FCF.bAR |
| IEEE802154_DSN_OFFSET = 2, ///< (IEEE 802.15.4-2006) PSDU.sequenceNumber |
| IEEE802154_MAC_MIN_BE = 1, ///< (IEEE 802.15.4-2006) macMinBE |
| IEEE802154_MAC_MAX_BE = 5, ///< (IEEE 802.15.4-2006) macMaxBE |
| IEEE802154_MAC_MAX_CSMA_BACKOFFS = 4, ///< (IEEE 802.15.4-2006) macMaxCSMABackoffs |
| IEEE802154_MAC_MAX_FRAMES_RETRIES = 3, ///< (IEEE 802.15.4-2006) macMaxFrameRetries |
| IEEE802154_A_UINT_BACKOFF_PERIOD = 20, ///< (IEEE 802.15.4-2006 7.4.1) MAC constants |
| IEEE802154_A_TURNAROUND_TIME = 12, ///< (IEEE 802.15.4-2006 6.4.1) PHY constants |
| IEEE802154_PHY_SHR_DURATION = 10, |
| ///< (IEEE 802.15.4-2006 6.4.2) PHY PIB attribute, specifically the O-QPSK PHY |
| IEEE802154_PHY_SYMBOLS_PER_OCTET = 2, |
| ///< (IEEE 802.15.4-2006 6.4.2) PHY PIB attribute, specifically the O-QPSK PHY |
| IEEE802154_MAC_ACK_WAIT_DURATION = (IEEE802154_A_UINT_BACKOFF_PERIOD + // |
| IEEE802154_A_TURNAROUND_TIME + // |
| IEEE802154_PHY_SHR_DURATION + // |
| (6 * IEEE802154_PHY_SYMBOLS_PER_OCTET)), |
| ///< (IEEE 802.15.4-2006 7.4.2) macAckWaitDuration PIB attribute |
| IEEE802154_SYMBOLS_PER_SEC = 62500 ///< (IEEE 802.15.4-2006 6.5.3.2) O-QPSK symbol rate |
| }; |
| |
| enum |
| { |
| CC2650_RAT_TICKS_PER_SEC = 4000000, ///< 4MHz clock |
| CC2650_INVALID_RSSI = 127, |
| CC2650_UNKNOWN_EUI64 = 0xFF, |
| ///< If the EUI64 read from the ccfg is all ones then the customer did not set the address |
| }; |
| |
| /** |
| * TX Power dBm lookup table - values from SmartRF Studio |
| */ |
| typedef struct output_config |
| { |
| int dbm; |
| uint16_t value; |
| } output_config_t; |
| |
| static const output_config_t rgOutputPower[] = { |
| {5, 0x9330}, // |
| {4, 0x9324}, // |
| {3, 0x5a1c}, // |
| {2, 0x4e18}, // |
| {1, 0x4214}, // |
| {0, 0x3161}, // |
| {-3, 0x2558}, // |
| {-6, 0x1d52}, // |
| {-9, 0x194e}, // |
| {-12, 0x144b}, // |
| {-15, 0x0ccb}, // |
| {-18, 0x0cc9}, // |
| {-21, 0x0cc7}, // |
| }; |
| |
| #define OUTPUT_CONFIG_COUNT (sizeof(rgOutputPower) / sizeof(rgOutputPower[0])) |
| |
| /* Max and Min Output Power in dBm */ |
| #define OUTPUT_POWER_MIN (rgOutputPower[OUTPUT_CONFIG_COUNT - 1].dbm) |
| #define OUTPUT_POWER_MAX (rgOutputPower[0].dbm) |
| #define OUTPUT_POWER_UNKNOWN 0xFFFF |
| |
| /** |
| * return value used when searching the source match array |
| */ |
| #define CC2650_SRC_MATCH_NONE 0xFF |
| |
| /** |
| * number of extended addresses used for source matching |
| */ |
| #define CC2650_EXTADD_SRC_MATCH_NUM 10 |
| |
| /** |
| * structure for source matching extended addresses |
| */ |
| typedef struct __attribute__((aligned(4))) ext_src_match_data |
| { |
| uint32_t srcMatchEn[((CC2650_EXTADD_SRC_MATCH_NUM + 31) / 32)]; |
| uint32_t srcPendEn[((CC2650_EXTADD_SRC_MATCH_NUM + 31) / 32)]; |
| uint64_t extAddrEnt[CC2650_EXTADD_SRC_MATCH_NUM]; |
| } ext_src_match_data_t; |
| |
| /** |
| * number of short addresses used for source matching |
| */ |
| #define CC2650_SHORTADD_SRC_MATCH_NUM 10 |
| |
| /** |
| * structure for source matching short addresses |
| */ |
| typedef struct __attribute__((aligned(4))) short_src_match_data |
| { |
| uint32_t srcMatchEn[((CC2650_SHORTADD_SRC_MATCH_NUM + 31) / 32)]; |
| uint32_t srcPendEn[((CC2650_SHORTADD_SRC_MATCH_NUM + 31) / 32)]; |
| rfc_shortAddrEntry_t extAddrEnt[CC2650_SHORTADD_SRC_MATCH_NUM]; |
| } short_src_match_data_t; |
| |
| /** |
| * size of length field in receive struct |
| * |
| * defined in Table 23-10 of the cc26xx TRM |
| */ |
| #define DATA_ENTRY_LENSZ_BYTE 1 |
| |
| /** |
| * address type for @ref rfCoreModifySourceMatchEntry() |
| */ |
| typedef enum cc2650_address |
| { |
| SHORT_ADDRESS = 1, |
| EXT_ADDRESS = 0, |
| } cc2650_address_t; |
| |
| /** |
| * This enum represents the state of a radio. |
| * Initially, a radio is in the Disabled state. |
| * |
| * The following are valid radio state transitions for the cc2650: |
| * |
| * (Radio ON) |
| * +----------+ Enable() +-------+ Receive() +---------+ Transmit() +----------+ |
| * | |----------->| |------------->| |--------------->| | |
| * | Disabled | | Sleep | | Receive | | Transmit | |
| * | |<-----------| |<-------------| |<---------------| | |
| * +----------+ Disable() | | Sleep() | | AckFrame RX or +----------+ |
| * | | (Radio OFF) +---------+ sTxCmdChainDone == true |
| * | | |
| * | | EnergyScan() +--------+ |
| * | |------------->| | |
| * | | | EdScan | |
| * | |<-------------| | |
| * | | signal ED | | |
| * +-------+ scan done +--------+ |
| * |
| * These states slightly differ from the states in \ref include/platform/radio.h. |
| * The additional states the phy can be in are due to the asynchronous nature |
| * of the CM0 radio core. |
| * |
| * | state | description | |
| * |------------------|----------------------------------------------------| |
| * | Disabled | The rfcore powerdomain is off and the RFCPE is off | |
| * | Sleep | The RFCORE PD is on, and the RFCPE is in IEEE mode | |
| * | Receive | The RFCPE is running a CMD_IEEE_RX | |
| * | Transmit | The RFCPE is running a transmit command string | |
| * | TransmitComplete | The transmit command string has completed | |
| * | EdScan | The RFCPE is running a CMD_IEEE_ED_SCAN | |
| * |
| * \note The RAT start and Radio Setup commands may be moved to the Receive() |
| * and EnergyScan() transitions in the future. |
| */ |
| typedef enum cc2650_PhyState |
| { |
| cc2650_stateDisabled = 0, |
| cc2650_stateSleep, |
| cc2650_stateReceive, |
| cc2650_stateEdScan, |
| cc2650_stateTransmit, |
| } cc2650_PhyState; |
| |
| #endif /* CC2650_RADIO_H_ */ |