@@ -24,24 +24,38 @@ namespace opcua
2424 * CTOR/DTOR
2525 **************************************************************************************/
2626
27- Opta::Opta (UA_Server * server, UA_NodeId const & node_id)
27+ Opta::Opta (
28+ UA_Server * server,
29+ UA_NodeId const & node_id,
30+ OptaVariant::Type const opta_type)
2831: _server{server}
2932, _node_id{node_id}
30- , _analog_input_mgr{nullptr }
31- , _digital_input_mgr{nullptr }
32- , _relay_mgr{nullptr }
33- , _led_mgr{nullptr }
33+ , _usr_button{opcua::UserButton::create (_server, _node_id)}
34+ , _analog_input_mgr{opcua::AnalogInputManager::create (_server, _node_id)}
35+ , _digital_input_mgr{opcua::DigitalInputManager::create (_server, _node_id)}
36+ , _relay_mgr{opcua::RelayManager::create (_server, _node_id)}
37+ , _led_mgr{(opta_type == OptaVariant::Type::WiFi) ? opcua::LedManager::create (_server, _node_id) : nullptr }
3438{
35- _usr_button = opcua::UserButton::create (_server, _node_id);
3639 if (!_usr_button)
37- UA_LOG_ERROR (UA_Log_Stdout, UA_LOGCATEGORY_SERVER, " Opta::Ctor: UserButton::create(...) failed." );
40+ UA_LOG_ERROR (UA_Log_Stdout, UA_LOGCATEGORY_SERVER, " %s: UserButton::create(...) failed." , __PRETTY_FUNCTION__);
41+ if (!_analog_input_mgr)
42+ UA_LOG_ERROR (UA_Log_Stdout, UA_LOGCATEGORY_SERVER, " %s: AnalogInputManager::create(...) failed." , __PRETTY_FUNCTION__);
43+ if (!_digital_input_mgr)
44+ UA_LOG_ERROR (UA_Log_Stdout, UA_LOGCATEGORY_SERVER, " %s: DigitalInputManager::create(...) failed." , __PRETTY_FUNCTION__);
45+ if (!_relay_mgr)
46+ UA_LOG_ERROR (UA_Log_Stdout, UA_LOGCATEGORY_SERVER, " %s: RelayManager::create(...) failed." , __PRETTY_FUNCTION__);
47+ if ((opta_type == OptaVariant::Type::WiFi) && !_led_mgr)
48+ UA_LOG_ERROR (UA_Log_Stdout, UA_LOGCATEGORY_SERVER, " %s: LedManager::create(...) failed." , __PRETTY_FUNCTION__);
3849}
3950
4051/* *************************************************************************************
4152 * PUBLIC MEMBER FUNCTIONS
4253 **************************************************************************************/
4354
44- Opta::SharedPtr Opta::create (UA_Server * server, OptaVariant::Type const opta_type)
55+ Opta::SharedPtr
56+ Opta::create (
57+ UA_Server * server,
58+ OptaVariant::Type const opta_type)
4559{
4660 UA_StatusCode rc = UA_STATUSCODE_GOOD;
4761
@@ -60,8 +74,7 @@ Opta::SharedPtr Opta::create(UA_Server * server, OptaVariant::Type const opta_ty
6074 if (UA_StatusCode_isBad (rc))
6175 {
6276 UA_LOG_ERROR (UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
63- " Opta::create: UA_Server_addObjectNode(...) failed with %s" ,
64- UA_StatusCode_name (rc));
77+ " %s: UA_Server_addObjectNode(...) failed with %s" , __PRETTY_FUNCTION__, UA_StatusCode_name (rc));
6578 return nullptr ;
6679 }
6780
@@ -81,8 +94,7 @@ Opta::SharedPtr Opta::create(UA_Server * server, OptaVariant::Type const opta_ty
8194 if (UA_StatusCode_isBad (rc))
8295 {
8396 UA_LOG_ERROR (UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
84- " Opta::create: UA_Server_addVariableNode(..., \" ManufacturerName\" , ...) failed with %s" ,
85- UA_StatusCode_name (rc));
97+ " %s: UA_Server_addVariableNode(..., \" ManufacturerName\" , ...) failed with %s" , __PRETTY_FUNCTION__, UA_StatusCode_name (rc));
8698 return nullptr ;
8799 }
88100
@@ -102,8 +114,7 @@ Opta::SharedPtr Opta::create(UA_Server * server, OptaVariant::Type const opta_ty
102114 if (UA_StatusCode_isBad (rc))
103115 {
104116 UA_LOG_ERROR (UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
105- " Opta::create: UA_Server_addVariableNode(..., \" ModelName\" , ...) failed with %s" ,
106- UA_StatusCode_name (rc));
117+ " %s: UA_Server_addVariableNode(..., \" ModelName\" , ...) failed with %s" , __PRETTY_FUNCTION__, UA_StatusCode_name (rc));
107118 return nullptr ;
108119 }
109120
@@ -123,61 +134,49 @@ Opta::SharedPtr Opta::create(UA_Server * server, OptaVariant::Type const opta_ty
123134 if (UA_StatusCode_isBad (rc))
124135 {
125136 UA_LOG_ERROR (UA_Log_Stdout, UA_LOGCATEGORY_SERVER,
126- " Opta::create: UA_Server_addVariableNode(..., \" Status\" , ...) failed with %s" ,
127- UA_StatusCode_name (rc));
137+ " %s: UA_Server_addVariableNode(..., \" Status\" , ...) failed with %s" , __PRETTY_FUNCTION__, UA_StatusCode_name (rc));
128138 return nullptr ;
129139 }
130140
131- auto const instance_ptr = std::make_shared<Opta>(server, node_id);
141+ auto const instance_ptr = std::make_shared<Opta>(server, node_id, opta_type );
132142 return instance_ptr;
133143}
134144
135- AnalogInputManager::SharedPtr Opta::analog_input_mgr ()
145+ void
146+ Opta::add_analog_input (
147+ UA_Server * server,
148+ const char * display_name,
149+ AnalogInput::OnReadRequestFunc const on_read_request_func)
136150{
137- if (!_analog_input_mgr)
138- {
139- _analog_input_mgr = opcua::AnalogInputManager::create (_server, _node_id);
140- if (!_analog_input_mgr)
141- UA_LOG_ERROR (UA_Log_Stdout, UA_LOGCATEGORY_SERVER, " Opta::analog_input_mgr: AnalogInputManager::create(...) failed." );
142- }
143-
144- return _analog_input_mgr;
151+ _analog_input_mgr->add_analog_input (server, display_name, on_read_request_func);
145152}
146153
147- DigitalInputManager::SharedPtr Opta::digital_input_mgr ()
154+ void
155+ Opta::add_digital_input (
156+ UA_Server * server,
157+ const char * display_name,
158+ DigitalInput::OnReadRequestFunc const on_read_request_func)
148159{
149- if (!_digital_input_mgr)
150- {
151- _digital_input_mgr = opcua::DigitalInputManager::create (_server, _node_id);
152- if (!_digital_input_mgr)
153- UA_LOG_ERROR (UA_Log_Stdout, UA_LOGCATEGORY_SERVER, " Opta::digital_input_mgr: DigitalInputManager::create(...) failed." );
154- }
155-
156- return _digital_input_mgr;
160+ _digital_input_mgr->add_digital_input (server, display_name, on_read_request_func);
157161}
158162
159- RelayManager::SharedPtr Opta::relay_mgr ()
163+ void
164+ Opta::add_relay_output (
165+ UA_Server * server,
166+ const char * display_name,
167+ Relay::OnSetRelayStateFunc const on_set_relay_state)
160168{
161- if (!_relay_mgr)
162- {
163- _relay_mgr = opcua::RelayManager::create (_server, _node_id);
164- if (!_relay_mgr)
165- UA_LOG_ERROR (UA_Log_Stdout, UA_LOGCATEGORY_SERVER, " Opta::relay_mgr: RelayManager::create(...) failed." );
166- }
167-
168- return _relay_mgr;
169+ _relay_mgr->add_relay_output (server, display_name, on_set_relay_state);
169170}
170171
171- LedManager::SharedPtr Opta::led_mgr ()
172+ void
173+ Opta::add_led_output (
174+ UA_Server * server,
175+ const char * display_name,
176+ Led::OnSetLedStateFunc const on_set_led_state)
172177{
173- if (!_led_mgr)
174- {
175- _led_mgr = opcua::LedManager::create (_server, _node_id);
176- if (!_led_mgr)
177- UA_LOG_ERROR (UA_Log_Stdout, UA_LOGCATEGORY_SERVER, " Opta::led_mgr: LedManager::create(...) failed." );
178- }
179-
180- return _led_mgr;
178+ if (_led_mgr) /* Only available for Arduino Opta WiFi. */
179+ _led_mgr->add_led_output (server, display_name, on_set_led_state);
181180}
182181
183182/* *************************************************************************************
0 commit comments