mirror of
https://github.com/espressif/openthread.git
synced 2026-08-13 22:27:47 +00:00
[radio] add proprietary radio support (#6558)
This commit adds single-band proprietary radio support for OpenThread. This feature will enable users to configure OpenThread stack with proprietary radio parameters and use a PHY as defined by the Platform. More specifically: 1. Introduced the following platform configuration options: - OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_SUPPORT - OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MIN - OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MAX - OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MASK - OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_PAGE 2. Updated the radio and meshcop tlv implementation to incorporate the proprietary radio configurations 3. Updated the network diagnostics code to support channel page mask value up to 32.
This commit is contained in:
@@ -413,6 +413,17 @@
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @def OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_SUPPORT
|
||||
*
|
||||
* Define to 1 to support proprietary radio configurations defined by platform.
|
||||
*
|
||||
* @note If this setting is set to 1, the channel range is defined by the platform. Choosing this option requires
|
||||
* the following configuration options to be defined by Platform:
|
||||
* OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_PAGE,
|
||||
* OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MIN,
|
||||
* OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MAX and,
|
||||
* OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MASK.
|
||||
*
|
||||
* @def OPENTHREAD_CONFIG_RADIO_915MHZ_OQPSK_SUPPORT
|
||||
*
|
||||
* Define to 1 to support OQPSK modulation in 915MHz frequency band. The physical layer parameters are defined in
|
||||
@@ -427,15 +438,18 @@
|
||||
*
|
||||
* @note If this settings is set to 1, the IEEE 802.15.4 channel range is 11 to 26.
|
||||
*
|
||||
* @note At least one of these two settings must be set to 1. The platform must support the modulation and frequency
|
||||
* @note At least one of these settings must be set to 1. The platform must support the modulation and frequency
|
||||
* band configured by the setting.
|
||||
*/
|
||||
#ifndef OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_SUPPORT
|
||||
#ifndef OPENTHREAD_CONFIG_RADIO_915MHZ_OQPSK_SUPPORT
|
||||
#ifndef OPENTHREAD_CONFIG_RADIO_2P4GHZ_OQPSK_SUPPORT
|
||||
#define OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_SUPPORT 0
|
||||
#define OPENTHREAD_CONFIG_RADIO_915MHZ_OQPSK_SUPPORT 0
|
||||
#define OPENTHREAD_CONFIG_RADIO_2P4GHZ_OQPSK_SUPPORT 1
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @def OPENTHREAD_CONFIG_DEFAULT_CHANNEL
|
||||
|
||||
@@ -118,4 +118,28 @@
|
||||
#define OPENTHREAD_CONFIG_PLATFORM_RADIO_SPINEL_RX_FRAME_BUFFER_SIZE 8192
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @def OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_SUPPORT
|
||||
*
|
||||
* Define to 1 if you want to enable proprietary radio support as defined by platform.
|
||||
*
|
||||
*/
|
||||
#ifndef OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_SUPPORT
|
||||
#define OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_SUPPORT 0
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_SUPPORT
|
||||
#if (!defined(OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_PAGE) || \
|
||||
!defined(OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MIN) || \
|
||||
!defined(OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MAX) || \
|
||||
!defined(OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MASK))
|
||||
#error "Proprietary radio support requires\
|
||||
OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_PAGE,\
|
||||
OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MIN,\
|
||||
OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MAX and\
|
||||
OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MASK\
|
||||
to be defined by Platform."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // CONFIG_PLATFORM_H_
|
||||
|
||||
@@ -200,6 +200,14 @@ void ChannelTlv::SetChannel(uint16_t aChannel)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_SUPPORT
|
||||
if ((OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MIN <= aChannel) &&
|
||||
(aChannel <= OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MAX))
|
||||
{
|
||||
channelPage = OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_PAGE;
|
||||
}
|
||||
#endif
|
||||
|
||||
SetChannelPage(channelPage);
|
||||
mChannel = HostSwap16(aChannel);
|
||||
}
|
||||
@@ -285,6 +293,18 @@ void ChannelMaskTlv::SetChannelMask(uint32_t aChannelMask)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_SUPPORT
|
||||
if (aChannelMask & OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MASK)
|
||||
{
|
||||
OT_ASSERT(entry != nullptr);
|
||||
entry->Init();
|
||||
entry->SetChannelPage(OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_PAGE);
|
||||
entry->SetMask(aChannelMask & OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MASK);
|
||||
|
||||
length += sizeof(MeshCoP::ChannelMaskEntry);
|
||||
}
|
||||
#endif
|
||||
|
||||
SetLength(length);
|
||||
}
|
||||
|
||||
@@ -318,6 +338,14 @@ uint32_t ChannelMaskTlv::GetChannelMask(void) const
|
||||
}
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_SUPPORT
|
||||
if (channelPage == OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_PAGE)
|
||||
{
|
||||
mask |= static_cast<const ChannelMaskEntry *>(cur)->GetMask() &
|
||||
OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MASK;
|
||||
}
|
||||
#endif
|
||||
|
||||
cur = cur->GetNext();
|
||||
}
|
||||
|
||||
@@ -356,8 +384,14 @@ uint32_t ChannelMaskTlv::GetChannelMask(const Message &aMessage)
|
||||
mask |= entry.GetMask() & OT_RADIO_915MHZ_OQPSK_CHANNEL_MASK;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_SUPPORT
|
||||
case OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_PAGE:
|
||||
IgnoreError(aMessage.Read(offset, entry));
|
||||
mask |= entry.GetMask() & OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MASK;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
offset += entry.GetEntrySize();
|
||||
}
|
||||
|
||||
|
||||
@@ -74,8 +74,8 @@ class Radio : public InstanceLocator, private NonCopyable
|
||||
|
||||
public:
|
||||
/**
|
||||
* This enumeration defines the IEEE 802.15.4 channel related parameters.
|
||||
*
|
||||
* This enumeration defines the IEEE 802.15.4 channel related parameters. It also
|
||||
* supports proprietary channel parameters defined by platform.
|
||||
*/
|
||||
enum
|
||||
{
|
||||
@@ -97,11 +97,20 @@ public:
|
||||
kChannelMin = OT_RADIO_2P4GHZ_OQPSK_CHANNEL_MIN,
|
||||
kChannelMax = OT_RADIO_2P4GHZ_OQPSK_CHANNEL_MAX,
|
||||
kSupportedChannelPages = OT_RADIO_CHANNEL_PAGE_0_MASK,
|
||||
#elif OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_SUPPORT
|
||||
kNumChannelPages = 1,
|
||||
kSupportedChannels = OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MASK,
|
||||
kChannelMin = OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MIN,
|
||||
kChannelMax = OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_MAX,
|
||||
kSupportedChannelPages = (1U << OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_CHANNEL_PAGE),
|
||||
#endif
|
||||
};
|
||||
|
||||
static_assert((OPENTHREAD_CONFIG_RADIO_2P4GHZ_OQPSK_SUPPORT || OPENTHREAD_CONFIG_RADIO_915MHZ_OQPSK_SUPPORT),
|
||||
"OPENTHREAD_CONFIG_RADIO_2P4GHZ_OQPSK_SUPPORT or OPENTHREAD_CONFIG_RADIO_915MHZ_OQPSK_SUPPORT "
|
||||
static_assert((OPENTHREAD_CONFIG_RADIO_2P4GHZ_OQPSK_SUPPORT || OPENTHREAD_CONFIG_RADIO_915MHZ_OQPSK_SUPPORT ||
|
||||
OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_SUPPORT),
|
||||
"OPENTHREAD_CONFIG_RADIO_2P4GHZ_OQPSK_SUPPORT "
|
||||
"or OPENTHREAD_CONFIG_RADIO_915MHZ_OQPSK_SUPPORT "
|
||||
"or OPENTHREAD_CONFIG_PLATFORM_RADIO_PROPRIETARY_SUPPORT "
|
||||
"must be set to 1 to specify the radio mode");
|
||||
|
||||
/**
|
||||
|
||||
@@ -410,7 +410,7 @@ Error NetworkDiagnostic::FillRequestedTlvs(const Message & aRequest,
|
||||
case NetworkDiagnosticTlv::kChannelPages:
|
||||
{
|
||||
uint8_t length = 0;
|
||||
uint8_t pageMask = Radio::kSupportedChannelPages;
|
||||
uint32_t pageMask = Radio::kSupportedChannelPages;
|
||||
ChannelPagesTlv tlv;
|
||||
|
||||
tlv.Init();
|
||||
|
||||
Reference in New Issue
Block a user