Skip to content

Commit fa8a277

Browse files
committed
Simplify API surface of DigitalExpansion classes.
1 parent 28b71e4 commit fa8a277

File tree

3 files changed

+80
-40
lines changed

3 files changed

+80
-40
lines changed

examples/opcua_server/opcua_server.ino

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -249,20 +249,37 @@ void setup()
249249
{
250250
char analog_in_name[32] = {0};
251251
snprintf(analog_in_name, sizeof(analog_in_name), "Analog Input I%d", d + 1);
252-
exp_dig->analog_input_mgr()->add_analog_input(opc_ua_server, analog_in_name, [i, d]() { return reinterpret_cast<DigitalExpansion *>(OptaController.getExpansionPtr(i))->pinVoltage(d); });
252+
exp_dig->add_analog_input(
253+
opc_ua_server,
254+
analog_in_name,
255+
[i, d]()
256+
{
257+
return reinterpret_cast<DigitalExpansion *>(OptaController.getExpansionPtr(i))->pinVoltage(d);
258+
});
253259

254260
char digital_in_name[32] = {0};
255261
snprintf(digital_in_name, sizeof(digital_in_name), "Digital Input I%d", d + 1);
256-
exp_dig->digital_input_mgr()->add_digital_input(opc_ua_server,
257-
digital_in_name,
258-
[i, d]() { return reinterpret_cast<DigitalExpansion *>(OptaController.getExpansionPtr(i))->digitalRead(d, true); });
262+
exp_dig->add_digital_input(
263+
opc_ua_server,
264+
digital_in_name,
265+
[i, d]()
266+
{
267+
return reinterpret_cast<DigitalExpansion *>(OptaController.getExpansionPtr(i))->digitalRead(d, true);
268+
});
259269
}
270+
260271
/* Expose mechanical relays via OPC/UA. */
261272
for (uint8_t r = 0; r < OPTA_DIGITAL_OUT_NUM; r++)
262273
{
263274
char mech_relay_name[32] = {0};
264275
snprintf(mech_relay_name, sizeof(mech_relay_name), "Relay %d", r + 1);
265-
exp_dig->relay_mgr()->add_relay_output(opc_ua_server, mech_relay_name, [i, r](bool const value) { reinterpret_cast<DigitalExpansion *>(OptaController.getExpansionPtr(i))->digitalWrite(r, value ? HIGH : LOW); });
276+
exp_dig->add_relay_output(
277+
opc_ua_server,
278+
mech_relay_name,
279+
[i, r](bool const value)
280+
{
281+
reinterpret_cast<DigitalExpansion *>(OptaController.getExpansionPtr(i))->digitalWrite(r, value ? HIGH : LOW);
282+
});
266283
}
267284
}
268285
else if (exp_type == EXPANSION_OPTA_ANALOG)

src/expansion/DigitalExpansion.cpp

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -23,46 +23,57 @@ namespace opcua
2323
{
2424

2525
/**************************************************************************************
26-
* PUBLIC MEMBER FUNCTIONS
26+
* CTOR/DTOR
2727
**************************************************************************************/
2828

29-
AnalogInputManager::SharedPtr
30-
DigitalExpansion::analog_input_mgr()
29+
DigitalExpansion::DigitalExpansion(
30+
UA_Server * server,
31+
UA_NodeId const parent_node_id,
32+
char * display_name,
33+
char * node_name,
34+
char * model_name)
35+
: Expansion(server, parent_node_id, display_name, node_name, model_name)
36+
, _analog_input_mgr{opcua::AnalogInputManager::create(_server, _node_id)}
37+
, _digital_input_mgr{opcua::DigitalInputManager::create(_server, _node_id)}
38+
, _relay_mgr{opcua::RelayManager::create(_server, _node_id)}
3139
{
3240
if (!_analog_input_mgr)
33-
{
34-
_analog_input_mgr = opcua::AnalogInputManager::create(_server, _node_id);
35-
if (!_analog_input_mgr)
36-
UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "%s: AnalogInputManager::create(...) failed.", __PRETTY_FUNCTION__);
37-
}
38-
39-
return _analog_input_mgr;
41+
UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "%s: AnalogInputManager::create(...) failed.", __PRETTY_FUNCTION__);
42+
if (!_digital_input_mgr)
43+
UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "%s: DigitalInputManager::create(...) failed.", __PRETTY_FUNCTION__);
44+
if (!_relay_mgr)
45+
UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "%s: RelayManager::create(...) failed.", __PRETTY_FUNCTION__);
4046
}
4147

42-
DigitalInputManager::SharedPtr
43-
DigitalExpansion::digital_input_mgr()
44-
{
45-
if (!_digital_input_mgr)
46-
{
47-
_digital_input_mgr = opcua::DigitalInputManager::create(_server, _node_id);
48-
if (!_digital_input_mgr)
49-
UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "%s: DigitalInputManager::create(...) failed.", __PRETTY_FUNCTION__);
50-
}
48+
/**************************************************************************************
49+
* PUBLIC MEMBER FUNCTIONS
50+
**************************************************************************************/
5151

52-
return _digital_input_mgr;
52+
void
53+
DigitalExpansion::add_analog_input(
54+
UA_Server * server,
55+
const char * display_name,
56+
AnalogInput::OnReadRequestFunc const on_read_request_func)
57+
{
58+
_analog_input_mgr->add_analog_input(server, display_name, on_read_request_func);
5359
}
5460

55-
RelayManager::SharedPtr
56-
DigitalExpansion::relay_mgr()
61+
void
62+
DigitalExpansion::add_digital_input(
63+
UA_Server * server,
64+
const char * display_name,
65+
DigitalInput::OnReadRequestFunc const on_read_request_func)
5766
{
58-
if (!_relay_mgr)
59-
{
60-
_relay_mgr = opcua::RelayManager::create(_server, _node_id);
61-
if (!_relay_mgr)
62-
UA_LOG_ERROR(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "%s: RelayManager::create(...) failed.", __PRETTY_FUNCTION__);
63-
}
67+
_digital_input_mgr->add_digital_input(server, display_name, on_read_request_func);
68+
}
6469

65-
return _relay_mgr;
70+
void
71+
DigitalExpansion::add_relay_output(
72+
UA_Server * server,
73+
const char * display_name,
74+
Relay::OnSetRelayStateFunc const on_set_relay_state)
75+
{
76+
_relay_mgr->add_relay_output(server, display_name, on_set_relay_state);
6677
}
6778

6879
/**************************************************************************************

src/expansion/DigitalExpansion.h

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,26 @@ class DigitalExpansion : public Expansion
4343
UA_NodeId const parent_node_id,
4444
char * display_name,
4545
char * node_name,
46-
char * model_name)
47-
: Expansion(server, parent_node_id, display_name, node_name, model_name)
48-
{ }
46+
char * model_name);
4947

5048

51-
AnalogInputManager::SharedPtr analog_input_mgr();
52-
DigitalInputManager::SharedPtr digital_input_mgr();
53-
RelayManager::SharedPtr relay_mgr();
49+
void
50+
add_analog_input(
51+
UA_Server * server,
52+
const char * display_name,
53+
AnalogInput::OnReadRequestFunc const on_read_request_func);
54+
55+
void
56+
add_digital_input(
57+
UA_Server * server,
58+
const char * display_name,
59+
DigitalInput::OnReadRequestFunc const on_read_request_func);
60+
61+
void
62+
add_relay_output(
63+
UA_Server * server,
64+
const char * display_name,
65+
Relay::OnSetRelayStateFunc const on_set_relay_state);
5466

5567

5668
private:

0 commit comments

Comments
 (0)