5 #ifndef UAVCAN_PROTOCOL_DYNAMIC_NODE_ID_SERVER_CENTRALIZED_STORAGE_HPP_INCLUDED 6 #define UAVCAN_PROTOCOL_DYNAMIC_NODE_ID_SERVER_CENTRALIZED_STORAGE_HPP_INCLUDED 16 namespace dynamic_node_id_server
41 for (
uint8_t bit = 0; bit < 8; bit++)
43 mask[byte * 8U + bit] = (array[byte] & (1U << bit)) != 0;
54 for (
uint8_t bit = 0; bit < 8; bit++)
56 if (mask[byte * 8U + bit])
58 array[byte] =
static_cast<uint8_t>(array[byte] | (1U << bit));
90 return -ErrInvalidParam;
103 if (node_id_int != node_id.
get())
111 new_occupation_mask[node_id.
get()] =
true;
119 if (occupation_array !=
maskToArray(new_occupation_mask))
125 occupation_mask_ = new_occupation_mask;
150 #endif // Include guard
Array< IntegerSpec< 8, SignednessUnsigned, CastModeSaturate >, ArrayModeStatic, BitLenToByteLen< NodeID::Max+1 >::Result > OccupationMaskArray
EnableIf< sizeof((reinterpret_cast< const R * >0)) -> size()) &&sizeof((*(reinterpret_cast< const R *>(0)))[0])
int add(const NodeID node_id, const UniqueID &unique_id)
static IStorageBackend::String convertUniqueIDToHex(const UniqueID &key)
int get(const IStorageBackend::String &key, uint32_t &out_value) const
std::size_t count() const
protocol::dynamic_node_id::server::Entry::FieldTypes::unique_id UniqueID
NodeID getNodeIDForUniqueID(const UniqueID &unique_id) const
int setAndGetBack(const IStorageBackend::String &key, uint32_t &inout_value)
bool isNodeIDOccupied(NodeID node_id) const
IStorageBackend & storage_
OccupationMask occupation_mask_
Storage(IStorageBackend &storage)
static IStorageBackend::String getOccupationMaskKey()
BitSet< NodeID::Max+1 > OccupationMask
static OccupationMask maskFromArray(const OccupationMaskArray &array)
static OccupationMaskArray maskToArray(const OccupationMask &mask)