change to set net and subnet in begin()

master
Hideaki Tai 4 years ago
parent 4cde3e955d
commit 1e54f64e8b

@ -268,8 +268,8 @@ namespace arx {
Array<PACKET_SIZE> packet; Array<PACKET_SIZE> packet;
IPAddress remote_ip; IPAddress remote_ip;
uint16_t remote_port; uint16_t remote_port;
uint8_t univ_net; uint8_t net_switch; // net of universe
uint8_t univ_subnet; uint8_t sub_switch; // subnet of universe
String short_name{"Arduino ArtNet"}; String short_name{"Arduino ArtNet"};
String long_name{"Ardino ArtNet Protocol by hideakitai/ArtNet"}; String long_name{"Ardino ArtNet Protocol by hideakitai/ArtNet"};
String node_report{""}; String node_report{""};
@ -319,10 +319,7 @@ namespace arx {
return OpCode::NA; return OpCode::NA;
} }
inline const IPAddress& inline const IPAddress& ip() const { return remote_ip; }
ip() const {
return remote_ip;
}
inline uint16_t port() const { return remote_port; } inline uint16_t port() const { return remote_port; }
inline String id() const { inline String id() const {
@ -370,14 +367,6 @@ namespace arx {
return packet[HEADER_SIZE + i]; return packet[HEADER_SIZE + i];
} }
void subscribe_net(const uint8_t n) {
univ_net = n;
}
void subscribe_subnet(const uint8_t sn) {
univ_subnet = sn;
}
template <typename F> template <typename F>
inline auto subscribe(const uint8_t universe, F&& func) inline auto subscribe(const uint8_t universe, F&& func)
-> std::enable_if_t<arx::is_callable<F>::value> { -> std::enable_if_t<arx::is_callable<F>::value> {
@ -388,7 +377,7 @@ namespace arx {
Serial.println(F("universe out of bounds")); Serial.println(F("universe out of bounds"));
return; return;
} else { } else {
uint32_t u = ((uint32_t)univ_net << 8) | ((uint32_t)univ_subnet << 4) | (uint32_t)universe; uint32_t u = ((uint32_t)net_switch << 8) | ((uint32_t)sub_switch << 4) | (uint32_t)universe;
callbacks.insert(make_pair(u, arx::function_traits<F>::cast(func))); callbacks.insert(make_pair(u, arx::function_traits<F>::cast(func)));
} }
} }
@ -402,7 +391,7 @@ namespace arx {
if (universe > 0xF) { if (universe > 0xF) {
Serial.println(F("universe out of bounds")); Serial.println(F("universe out of bounds"));
} else { } else {
uint32_t u = ((uint32_t)univ_net << 8) | ((uint32_t)univ_subnet << 4) | (uint32_t)universe; uint32_t u = ((uint32_t)net_switch << 8) | ((uint32_t)sub_switch << 4) | (uint32_t)universe;
callbacks.insert(make_pair(u, arx::function_traits<F>::cast(func))); callbacks.insert(make_pair(u, arx::function_traits<F>::cast(func)));
} }
} }
@ -458,8 +447,18 @@ namespace arx {
} }
protected: protected:
void attach(S& s) { void attach(S& s, const uint8_t subscribe_net = 0, const uint8_t subscribe_subnet = 0) {
stream = &s; stream = &s;
if (subscribe_net > 128) {
Serial.println("Net must be < 128");
} else {
net_switch = subscribe_net;
}
if (subscribe_subnet > 16) {
Serial.println("Subnet must be < 16");
} else {
sub_switch = subscribe_subnet;
}
} }
private: private:
@ -511,10 +510,10 @@ namespace arx {
memset(r.port_types, 0, 4); memset(r.port_types, 0, 4);
memset(r.good_input, 0, 4); memset(r.good_input, 0, 4);
memset(r.good_output, 0, 4); memset(r.good_output, 0, 4);
r.net_sw = net_switch & 0x7F;
r.sub_sw = sub_switch & 0x0F;
size_t i = 0; size_t i = 0;
for (const auto& pair : callbacks) { for (const auto& pair : callbacks) {
r.net_sw = (pair.first >> 8) & 0x7F; // all callbacks have same value
r.sub_sw = (pair.first >> 4) & 0x0F;
r.sw_in[i] = pair.first & 0x0F; r.sw_in[i] = pair.first & 0x0F;
r.sw_out[i] = i; // dummy: output port is flexible r.sw_out[i] = i; // dummy: output port is flexible
r.port_types[i] = 0xC0; // I/O available by DMX512 r.port_types[i] = 0xC0; // I/O available by DMX512
@ -545,10 +544,10 @@ namespace arx {
S stream; S stream;
public: public:
void begin(const uint16_t recv_port = DEFAULT_PORT) { void begin(const uint8_t subscribe_net = 0, const uint8_t subscribe_subnet = 0, const uint16_t recv_port = DEFAULT_PORT) {
stream.begin(recv_port); stream.begin(recv_port);
this->Sender_<S>::attach(stream); this->Sender_<S>::attach(stream);
this->Receiver_<S>::attach(stream); this->Receiver_<S>::attach(stream, subscribe_net, subscribe_subnet);
} }
void parse() { void parse() {
@ -572,9 +571,9 @@ namespace arx {
S stream; S stream;
public: public:
void begin(const uint16_t recv_port = DEFAULT_PORT) { void begin(const uint8_t subscribe_net = 0, const uint8_t subscribe_subnet = 0, const uint16_t recv_port = DEFAULT_PORT) {
stream.begin(recv_port); stream.begin(recv_port);
this->Receiver_<S>::attach(stream); this->Receiver_<S>::attach(stream, subscribe_net, subscribe_subnet);
} }
}; };
} // namespace artnet } // namespace artnet

Loading…
Cancel
Save