29 #include <boost/asio.hpp>
46 typedef unsigned char byte;
67 id64 = bot_or_hub_id & 0x7FFF;
68 SerialNumber low_word = ((fleet64 << 16) + (type64 << 15) + id64) & 0xFFFFFFFF;
70 return (high_word << 32) + low_word;
87 void startup(
const std::string& port_name,
const int baud_rate,
const NodeId& my_node_id,
88 const uint16_t network_id,
const std::string& xbee_info_location,
89 const bool& use_encryption,
const std::string& encryption_password,
90 const std::string& mesh_unicast_retries,
const std::string& unicast_mac_retries,
91 const std::string& network_delay_slots,
92 const std::string& broadcast_multi_transmits,
int fleet,
unsigned subnet_mask);
110 add_peer(node_id, type, bot_or_hub_id, fleet_id_);
119 std::shared_ptr<boost::asio::io_context> io;
120 boost::asio::serial_port* port;
124 std::string glog_group;
126 unsigned subnet_mask_{0xFFFF};
129 std::map<NodeId, SerialNumber> node_id_to_serial_number_map;
131 std::vector<std::string> received_packets;
134 void get_my_serial_number();
135 void get_maximum_payload_size();
136 void broadcast_node_id();
142 void write(
const std::string& raw);
143 std::string read_until(
const std::string& delimiter);
144 size_t bytes_available();
145 void read(
void* ptr,
const size_t n_bytes);
146 void async_read_with_timeout(std::string& buffer,
const std::string& delimiter,
148 std::function<
void(
const std::string&)> handler);
151 std::string convertToHex(
const std::string& str);
154 void enter_command_mode();
156 void exit_command_mode();
159 std::string read_frame();
164 std::string api_transmit_request(
const SerialNumber& dest,
const byte frame_id,
const byte* ptr,
165 const size_t length);
166 std::string api_explicit_transmit_request(
const SerialNumber& dest,
169 void process_frame();
170 void process_frame_if_available();
171 void process_frame_extended_transmit_status(
const std::string& response_string);
172 void process_frame_at_command_response(
const std::string& response_string);
173 void process_frame_receive_packet(
const std::string& response_string);
174 void process_frame_node_identification_indicator(
const std::string& response_string);
175 void process_frame_explicit_rx_indicator(
const std::string& response_string);
189 bool received_rssi_{
false};
190 bool received_er_{
false};
191 bool received_gd_{
false};
192 bool received_bc_{
false};
193 bool received_tr_{
false};
196 uint16_t current_rssi_{0};
197 uint16_t history_rssi_{0};
198 int rssi_query_count_{1};
199 uint16_t max_rssi_{0};
200 uint16_t min_rssi_{150};
201 uint16_t average_rssi_{0};
204 uint32_t bytes_transmitted_{0};
207 uint16_t received_error_count_{0};
210 uint16_t received_good_count_{0};
213 uint16_t transmission_failure_count_{0};
215 std::string my_xbee_info_location_{
""};
void add_peer(const NodeId node_id, NodeType type, int bot_or_hub_id, int fleet_id)
static const NodeId broadcast
uint16_t max_payload_size
void send_packet(const NodeId &dest, const std::string &s)
std::vector< std::string > get_packets()
void send_test_links(const NodeId &dest, const NodeId &com_dest)
void startup(const std::string &port_name, const int baud_rate, const NodeId &my_node_id, const uint16_t network_id, const std::string &xbee_info_location, const bool &use_encryption, const std::string &encryption_password, const std::string &mesh_unicast_retries, const std::string &unicast_mac_retries, const std::string &network_delay_slots, const std::string &broadcast_multi_transmits, int fleet, unsigned subnet_mask)
void send_diagnostic_commands()
void add_peer(const NodeId node_id, NodeType type, int bot_or_hub_id)
SerialNumber serial_from_node_data(NodeType type, int fleet_id, int bot_or_hub_id)
Packet(const NodeId &dest, const std::string &data)