23 #ifndef RDM_CPP_UID_H_
24 #define RDM_CPP_UID_H_
29 #include "etcpal/cpp/hash.h"
86 constexpr
Uid(uint16_t manu_val, uint32_t id_val) noexcept;
88 constexpr
Uid(
const RdmUid& c_uid) noexcept;
91 constexpr
const RdmUid&
get() const noexcept;
92 ETCPAL_CONSTEXPR_14
RdmUid&
get() noexcept;
94 constexpr uint32_t
device_id() const noexcept;
97 constexpr
bool IsValid() const noexcept;
105 constexpr
bool IsDynamic() const noexcept;
107 constexpr
bool IsStatic() const noexcept;
118 static
Uid Static(uint16_t manu_val, uint32_t id_val) noexcept;
126 constexpr
Uid::Uid(uint16_t manu_val, uint32_t id_val) noexcept : uid_{manu_val, id_val}
247 uid_.manu = (uid_.manu & 0x8000) | (manu_val & 0x7fff);
260 return FromString(uid_str.c_str());
305 return Uid((manu_val & 0x7fff), id_val);
324 constexpr
bool operator==(
const RdmUid& c_uid,
const Uid& uid) noexcept
326 return c_uid == uid.get();
329 constexpr
bool operator!=(
const RdmUid& c_uid,
const Uid& uid) noexcept
331 return !(c_uid == uid);
334 constexpr
bool operator==(
const Uid& uid,
const RdmUid& c_uid) noexcept
336 return uid.get() == c_uid;
341 return !(uid == c_uid);
346 constexpr
bool operator==(
const Uid& a,
const Uid& b) noexcept
348 return a.get() == b.get();
351 constexpr
bool operator!=(
const Uid& a,
const Uid& b) noexcept
356 constexpr
bool operator<(
const Uid& a,
const Uid& b) noexcept
358 return a.get() < b.get();
361 constexpr
bool operator>(
const Uid& a,
const Uid& b) noexcept
366 constexpr
bool operator<=(
const Uid& a,
const Uid& b) noexcept
371 constexpr
bool operator>=(
const Uid& a,
const Uid& b) noexcept
395 #if SIZE_MAX >= 0xFFFFFFFFFFFF
396 return (
static_cast<size_t>(uid.get().manu) << 32) | uid.get().id;
A C++ wrapper class for the RDM UID type.
Definition: uid.h:82
bool IsDeviceManufacturerBroadcast() const noexcept
Determine whether a UID is one of the E1.33 values defined by RPT_ALL_MID_DEVICES.
Definition: uid.h:203
constexpr bool BroadcastManufacturerIdMatches(uint16_t manu_val) const noexcept
Determine whether an RDMnet Device Manufacturer Broadcast UID matches a specific ESTA Manufacturer ID...
Definition: uid.h:210
void SetDeviceId(uint32_t id_val) noexcept
Set the Device ID portion of this UID.
Definition: uid.h:251
std::string ToString() const
Convert a UID to a string representation.
Definition: uid.h:168
Uid & operator=(const RdmUid &c_uid) noexcept
Assign an instance of the C RdmUid type to an instance of this class.
Definition: uid.h:136
Uid()=default
Constructs a null UID by default.
bool IsControllerBroadcast() const noexcept
Determine whether a UID is the E1.33 value RPT_ALL_CONTROLLERS.
Definition: uid.h:190
constexpr bool IsDynamicUidRequest() const noexcept
Determine whether a UID is a Dynamic UID Request as defined in ANSI E1.33.
Definition: uid.h:229
static Uid FromString(const std::string &uid_str) noexcept
Create a UID from a string representation.
Definition: uid.h:258
constexpr bool IsValid() const noexcept
Determine if a UID is valid. All UIDs are valid unless they are null (all 0's).
Definition: uid.h:178
constexpr uint32_t device_id() const noexcept
Get the Device ID portion of this UID.
Definition: uid.h:161
static Uid DynamicUidRequest(uint16_t manu_val) noexcept
Create an RDMnet Dynamic UID Request from a given ESTA Manufacturer ID.
Definition: uid.h:309
bool IsDeviceBroadcast() const noexcept
Determine whether a UID is the E1.33 value RPT_ALL_DEVICES.
Definition: uid.h:196
constexpr bool IsStatic() const noexcept
Determine whether a UID is a Static UID as defined in ANSI E1.33.
Definition: uid.h:236
static Uid ControllerBroadcast() noexcept
Create a UID representing RPT_ALL_CONTROLLERS as defined in ANSI E1.33.
Definition: uid.h:281
constexpr bool IsDynamic() const noexcept
Determine whether a UID is a Dynamic UID as defined in ANSI E1.33.
Definition: uid.h:223
constexpr const RdmUid & get() const noexcept
Get a const reference to the underlying C type.
Definition: uid.h:143
static Uid Static(uint16_t manu_val, uint32_t id_val) noexcept
Explicitly create an RDMnet Static UID from an ESTA Manufacturer ID and Device ID.
Definition: uid.h:303
bool IsBroadcast() const noexcept
Determine whether a UID is the E1.20 value BROADCAST_ALL_DEVICES_ID.
Definition: uid.h:184
static Uid DeviceBroadcast() noexcept
Create a UID representing RPT_ALL_DEVICES as defined in ANSI E1.33.
Definition: uid.h:287
constexpr uint16_t DeviceBroadcastManufacturerId() const noexcept
Get the ESTA Manufacturer ID from an RDMnet Device Manufacturer Broadcast UID.
Definition: uid.h:216
static Uid Broadcast() noexcept
Create a UID representing BROADCAST_ALL_DEVICES_ID as defined in ANSI E1.20.
Definition: uid.h:275
void SetManufacturerId(uint16_t manu_val) noexcept
Set the ESTA Manufacturer ID portion of this UID.
Definition: uid.h:244
constexpr uint16_t manufacturer_id() const noexcept
Get the ESTA Manufacturer ID portion of this UID.
Definition: uid.h:155
void HashCombine(size_t &seed, const T &val)
#define ETCPAL_CONSTEXPR_14_OR_INLINE
#define RDM_GET_MANUFACTURER_ID(uidptr)
Get the ESTA Manufacturer ID from a UID.
Definition: uid.h:237
#define RDM_UID_IS_NULL(uidptr)
Determine if a UID is null.
Definition: uid.h:197
#define RDMNET_UID_IS_DEVICE_MANU_BROADCAST(uidptr)
Determine whether a UID is one of the E1.33 values defined by RPT_ALL_MID_DEVICES.
Definition: uid.h:159
const RdmUid kRdmnetControllerBroadcastUid
Definition: uid.c:28
#define RDMNET_UID_IS_CONTROLLER_BROADCAST(uidptr)
Determine whether a UID is the E1.33 value RPT_ALL_CONTROLLERS.
Definition: uid.h:135
#define RDMNET_UID_IS_DYNAMIC(uidptr)
Determine whether a UID is a Dynamic UID as defined in ANSI E1.33.
Definition: uid.h:216
#define RDM_UID_IS_BROADCAST(uidptr)
Determine whether a UID is the E1.20 value BROADCAST_ALL_DEVICES_ID.
Definition: uid.h:127
#define RDMNET_UID_IS_DEVICE_BROADCAST(uidptr)
Determine whether a UID is the E1.33 value RPT_ALL_DEVICES.
Definition: uid.h:144
#define RDMNET_UID_IS_DYNAMIC_UID_REQUEST(uidptr)
Determine whether a UID is a Dynamic UID Request as defined in ANSI E1.33.
Definition: uid.h:205
bool rdm_uid_to_string(const RdmUid *uid, char *buf)
Create a string representation of a UID.
Definition: uid.c:79
const RdmUid kRdmnetDeviceBroadcastUid
Definition: uid.c:29
#define RDM_GET_DEVICE_ID(uidptr)
Get the Device ID from a UID.
Definition: uid.h:244
#define RDMNET_DEVICE_BROADCAST_MANU_ID(uidptr)
Get the ESTA Manufacturer ID from an RDMnet Device Manufacturer Broadcast UID.
Definition: uid.h:185
#define RDMNET_INIT_DEVICE_MANU_BROADCAST(uidptr, manu_val)
Initialize an RDMnet Device Manufacturer Broadcast UID with a Manufacturer ID.
Definition: uid.h:112
#define RDMNET_UID_IS_STATIC(uidptr)
Determine whether a UID is a Static UID as defined in ANSI E1.33.
Definition: uid.h:230
#define RDMNET_INIT_DYNAMIC_UID_REQUEST(uidptr, manu_val)
Definition: uid.h:100
#define RDM_UID_STRING_BYTES
Definition: uid.h:256
bool rdm_string_to_uid(const char *str, RdmUid *uid)
Create a UID from a string representation.
Definition: uid.c:100
const RdmUid kRdmBroadcastUid
Definition: uid.c:27
#define RDMNET_DEVICE_BROADCAST_MANU_MATCHES(uidptr, manu_val)
Determine whether an RDMnet Device Manufacturer Broadcast UID matches a specific ESTA Manufacturer ID...
Definition: uid.h:174
A type and helper functions for the Unique ID (UID) used in the RDM family of protocols.