23#ifndef JAIABOT_SRC_LIB_COMMS_COMMS_H
24#define JAIABOT_SRC_LIB_COMMS_COMMS_H
26#include <goby/acomms/acomms_constants.h>
27#include <goby/util/sci.h>
57 " is less than Bot ID minimum"));
61 " is greater than Bot ID maximum"));
68 " is less than Hub ID minimum"));
72 " is greater than Hub ID maximum"));
77 unsigned num_modems_in_subnet = (0xFFFF ^ subnet_mask) + 1;
83 return hub_id + 1 +
static_cast<int>(link) * num_modems_in_subnet;
94 unsigned num_modems_in_subnet = (0xFFFF ^ subnet_mask) + 1;
100 int base_modem_id = modem_id & (~subnet_mask & 0xFFFF);
109 unsigned num_modems_in_subnet = (0xFFFF ^ subnet_mask) + 1;
110 int link_id = (subnet_mask & modem_id) >> goby::util::ceil_log2(num_modems_in_subnet);
116template <
typename DCCLMessageWithLinkField>
117void set_link_type(DCCLMessageWithLinkField& msg,
int src_modem_id,
unsigned subnet_mask)
122inline goby::acomms::protobuf::DynamicBufferConfig
127 for (
const auto& override_buffer : link_aware_buffer.
buffer_override())
129 if (override_buffer.link() == link)
130 buffer.MergeFrom(override_buffer.buffer());
const ::goby::acomms::protobuf::DynamicBufferConfig & buffer_base() const
const ::jaiabot::protobuf::LinkAwareBufferConfig_LinkBufferConfig & buffer_override(int index) const
constexpr int broadcast_modem_id
int modem_id_from_bot_id(int bot_id, unsigned subnet_mask, jaiabot::protobuf::Link link)
constexpr int hub_id_total
void check_hub_id_bounds(int hub_id)
constexpr int hub_base_modem_id
constexpr int bot_id_total
jaiabot::protobuf::Link link_from_modem_id(int modem_id, unsigned subnet_mask)
void check_bot_id_bounds(int bot_id)
goby::acomms::protobuf::DynamicBufferConfig buffer_for_link(const jaiabot::protobuf::LinkAwareBufferConfig &link_aware_buffer, jaiabot::protobuf::Link link)
constexpr int bot0_base_modem_id
constexpr int default_hub_id
int bot_id_from_modem_id(int modem_id, unsigned subnet_mask)
int hub_modem_id(unsigned subnet_mask, jaiabot::protobuf::Link link, int hub_id=-1)
void set_link_type(DCCLMessageWithLinkField &msg, int src_modem_id, unsigned subnet_mask)
bool Link_IsValid(int value)