mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-26 16:03:33 +08:00
Acceptance filter update for new transport layer corrections
This commit is contained in:
@@ -16,10 +16,8 @@
|
|||||||
|
|
||||||
namespace uavcan
|
namespace uavcan
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* These arguments defines whether acceptance filter configuration has anonymous massages or not
|
|
||||||
*/
|
|
||||||
enum AnonMassagePresence {WithAnonMsg,NoAnonMsg};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class configures hardware acceptance filters (if this feature is present on the particular CAN driver) to
|
* This class configures hardware acceptance filters (if this feature is present on the particular CAN driver) to
|
||||||
@@ -38,6 +36,13 @@ enum AnonMassagePresence {WithAnonMsg,NoAnonMsg};
|
|||||||
*/
|
*/
|
||||||
class CanAcceptanceFilterConfigurator
|
class CanAcceptanceFilterConfigurator
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* These arguments defines whether acceptance filter configuration has anonymous messages or not
|
||||||
|
*/
|
||||||
|
enum AnonMessagePresence {WithAnonMsg,NoAnonMsg};
|
||||||
|
|
||||||
|
private:
|
||||||
/**
|
/**
|
||||||
* Below constants based on UAVCAN transport layer specification. Masks and ID's depends on message
|
* Below constants based on UAVCAN transport layer specification. Masks and ID's depends on message
|
||||||
* TypeID, TransferID (RequestNotResponse - for service types, ServiceNotMessage - for all types of messages).
|
* TypeID, TransferID (RequestNotResponse - for service types, ServiceNotMessage - for all types of messages).
|
||||||
@@ -51,7 +56,7 @@ class CanAcceptanceFilterConfigurator
|
|||||||
* HW filters.
|
* HW filters.
|
||||||
* DefaultAnonMsgMask = 00000 00000000 00000000 11111111
|
* DefaultAnonMsgMask = 00000 00000000 00000000 11111111
|
||||||
* DefaultAnonMsgID = 00000 00000000 00000000 00000000, by default the config is added to accept all anonymous
|
* DefaultAnonMsgID = 00000 00000000 00000000 00000000, by default the config is added to accept all anonymous
|
||||||
* frames. In case there are no anonymous massages, invoke configureFilters(NoAnonMsg).
|
* frames. In case there are no anonymous messages, invoke configureFilters(NoAnonMsg).
|
||||||
*/
|
*/
|
||||||
static const unsigned DefaultFilterMsgMask = 0xFFFF80;
|
static const unsigned DefaultFilterMsgMask = 0xFFFF80;
|
||||||
static const unsigned DefaultFilterServiceMask = 0x7F80;
|
static const unsigned DefaultFilterServiceMask = 0x7F80;
|
||||||
@@ -68,7 +73,7 @@ class CanAcceptanceFilterConfigurator
|
|||||||
/**
|
/**
|
||||||
* Fills the multiset_configs_ to proceed it with computeConfiguration()
|
* Fills the multiset_configs_ to proceed it with computeConfiguration()
|
||||||
*/
|
*/
|
||||||
int16_t loadInputConfiguration(AnonMassagePresence load_mode);
|
int16_t loadInputConfiguration(AnonMessagePresence load_mode);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method merges several listeners's filter configurations by predetermined algorithm
|
* This method merges several listeners's filter configurations by predetermined algorithm
|
||||||
@@ -93,10 +98,10 @@ public:
|
|||||||
/**
|
/**
|
||||||
* This method invokes loadInputConfiguration(), computeConfiguration() and applyConfiguration() consequently, so
|
* This method invokes loadInputConfiguration(), computeConfiguration() and applyConfiguration() consequently, so
|
||||||
* that optimal acceptance filter configuration will be computed and loaded through CanDriver::configureFilters()
|
* that optimal acceptance filter configuration will be computed and loaded through CanDriver::configureFilters()
|
||||||
* @return 0 = success, negative for error. Input argument defines the presence of anonymous massages
|
* @return 0 = success, negative for error. Input argument defines the presence of anonymous messages
|
||||||
* WithAnonMsg(default)/NoAnonMsg.
|
* WithAnonMsg(default)/NoAnonMsg.
|
||||||
*/
|
*/
|
||||||
int configureFilters(AnonMassagePresence mode = WithAnonMsg);
|
int configureFilters(AnonMessagePresence mode = WithAnonMsg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the configuration computed with computeConfiguration().
|
* Returns the configuration computed with computeConfiguration().
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ const unsigned CanAcceptanceFilterConfigurator::DefaultFilterServiceMask;
|
|||||||
const unsigned CanAcceptanceFilterConfigurator::DefaultAnonMsgMask;
|
const unsigned CanAcceptanceFilterConfigurator::DefaultAnonMsgMask;
|
||||||
const unsigned CanAcceptanceFilterConfigurator::DefaultAnonMsgID;
|
const unsigned CanAcceptanceFilterConfigurator::DefaultAnonMsgID;
|
||||||
|
|
||||||
int16_t CanAcceptanceFilterConfigurator::loadInputConfiguration(AnonMassagePresence load_mode)
|
int16_t CanAcceptanceFilterConfigurator::loadInputConfiguration(AnonMessagePresence load_mode)
|
||||||
{
|
{
|
||||||
multiset_configs_.clear();
|
multiset_configs_.clear();
|
||||||
|
|
||||||
@@ -149,7 +149,7 @@ int16_t CanAcceptanceFilterConfigurator::applyConfiguration(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CanAcceptanceFilterConfigurator::configureFilters(AnonMassagePresence mode)
|
int CanAcceptanceFilterConfigurator::configureFilters(AnonMessagePresence mode)
|
||||||
{
|
{
|
||||||
if (getNumFilters() == 0)
|
if (getNumFilters() == 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -156,10 +156,11 @@ TEST(CanAcceptanceFilter, Basic_test)
|
|||||||
|
|
||||||
|
|
||||||
uavcan::CanAcceptanceFilterConfigurator no_anon_test_confiruration(node);
|
uavcan::CanAcceptanceFilterConfigurator no_anon_test_confiruration(node);
|
||||||
configure_filters_assert = no_anon_test_confiruration.configureFilters(uavcan::NoAnonMsg);
|
configure_filters_assert = no_anon_test_confiruration.configureFilters
|
||||||
|
(uavcan::CanAcceptanceFilterConfigurator::NoAnonMsg);
|
||||||
if (configure_filters_assert == 0)
|
if (configure_filters_assert == 0)
|
||||||
{
|
{
|
||||||
std::cout << "Filters are configured without anonymous configuration..."<< std::endl;
|
std::cout << "Filters are configured without anonymous configuration..." << std::endl;
|
||||||
}
|
}
|
||||||
const auto& configure_array_2 = no_anon_test_confiruration.getConfiguration();
|
const auto& configure_array_2 = no_anon_test_confiruration.getConfiguration();
|
||||||
configure_array_size = configure_array_2.getSize();
|
configure_array_size = configure_array_2.getSize();
|
||||||
|
|||||||
Reference in New Issue
Block a user