ifw-fcf 8.0.2
 
Loading...
Searching...
No Matches
deviceLcsIf.hpp
Go to the documentation of this file.
1
7
8#ifndef FCF_DEVMGR_COMMON_DEVICE_LCS_IF_H
9#define FCF_DEVMGR_COMMON_DEVICE_LCS_IF_H
10
11#include <yaml-cpp/yaml.h>
12
13#include <functional>
14#include <memory>
15#include <string>
16#include <utility>
17#include <variant>
18#include <vector>
19
20#include <mal/Cii.hpp>
21#include <mal/utility/LoadMal.hpp>
22
23#include <ifw/core/utils/bat/logger.hpp>
24
25#include <ifw/fnd/defs/iCommAdapter.hpp>
26
27#include <eso/uatools/ualib/client.hpp>
28
30
31#include <config-ng/ciiConfigApi.hpp>
32
33
35
36// CreateVariantVector(...) was removed during the port to
37// ICommAdapter. Use `MakeCallArgs(...)` from
38// `ifw/fcf/devmgr/common/fcfCommHelpers.hpp` instead — same idea,
39// returns std::vector<ifw::fnd::defs::CallArgument> ready for
40// `ualib::Client::Call`.
41
50 public:
52 virtual ~DeviceControllerData();
53 inline int GetState() const;
54 inline void SetState(int state);
55 inline int GetSubstate() const;
56 inline std::string GetStateStr() const;
57 inline void SetSubstate(int subtate);
58 inline bool GetLocalFlag() const;
59 inline void SetLocalFlag(bool local_flag);
60 inline int GetErrorCode() const;
61 inline void SetErrorCode(int error_code);
62
63 void SetData(const DeviceControllerData& data);
64
65 private:
66 int m_state;
67 int m_substate;
68 bool m_local;
69 int m_error_code;
70 };
71
88 class DataContext;
89
90 // cppcheck-suppress unusedStructMember
92 public:
98 explicit DeviceLcsIf(std::shared_ptr<IDeviceConfig> config,
99 DataContext& data_ctx);
100
101 enum {
107 };
108
109
118 virtual void InitObject();
119
132 virtual void RegisterComm(std::shared_ptr<ifw::fnd::defs::ICommAdapter> comm_if,
133 std::function<void()> on_failure,
134 std::function<void()> on_normal);
135
144 virtual void Connect();
145
153 virtual void Disconnect();
154
159 virtual bool IsNotReady() const;
160
165 virtual bool IsReady() const;
166
175 virtual bool IsDisabling() const;
176
181 virtual bool IsOperational() const;
182
193 virtual bool IsHwFailure() const;
194
200 virtual void Init();
201
208 virtual void Enable();
209
216 virtual void Disable();
217
226 virtual void Stop();
227
234 virtual void Reset();
235
245 virtual void StartMonitoring();
246
255 virtual void StopMonitoring();
256
261 virtual void ReadStatus(DeviceControllerData& status);
262
279 virtual void Listener(const ifw::fnd::defs::Notification& note);
280
286 virtual std::string GetRpcError(const short error_code) const = 0;
287
297 virtual std::string GetHwError(int& error_code, const bool update = false);
298
299
314 std::string GetMapValue(const std::string& category, const std::string& key) const;
315
322 ifw::fnd::defs::SubscriptionHandler GetSubscriptionHandler();
323
328 bool IsConfigLoaded() const;
329
334 bool IsConnected() const;
335
341 virtual std::shared_ptr<IDeviceConfig> GetDeviceConfig() const;
342
343 const elt::configng::CiiConfigInstanceNamespace& GetCfgInstance() const;
344
345
355 virtual void GetStates(int &state, int &substate);
356
357 protected:
358
363 void LoadConfig();
364
380 void ExecuteRpc(const std::string& obj,
381 const std::string& proc,
382 std::vector<ifw::fnd::defs::CallArgument> args);
383
407 static std::pair<std::string, std::string>
408 DecodeRpcAddress(const std::string& proc,
409 const std::string& obj_hint = "");
410 int ReadErrorCode();
411
412
413
422 void StoreUaNames(const std::vector <std::pair<std::string, unsigned int>>& ualist);
423
433 void StoreAttribute(const std::string& key,
434 const ifw::fnd::defs::Value& value,
435 int attribute);
436
437 inline void SetConfigLoad(bool flag);
438
439 protected:
440
441 // NOLINTBEGIN(misc-non-private-member-variables-in-classes)
445 std::shared_ptr<IDeviceConfig> m_config;
449 std::unique_ptr<elt::configng::CiiConfigDocument> m_config_doc;
450
451
452
454 std::string m_lcs_prefix;
455
460 std::shared_ptr<ifw::fnd::defs::ICommAdapter> m_comm;
461
466 std::function<void()> m_on_failure;
467
472 std::function<void()> m_on_normal;
473
490 ifw::fnd::defs::RegistrationToken m_state_token;
491
495 int m_state {};
496
501
505 bool m_local {false};
506
510 int m_error_code {false};
511
515 bool m_config_loaded {false};
516
520 bool m_connected {false};
521
523
528 std::unordered_map<std::string, short> m_ua_status_map;
529
532 std::vector<std::string> m_ua_monitor_vector;
533
534 std::unordered_map<short, std::string> m_hw_errors;
535 // NOLINTEND(misc-non-private-member-variables-in-classes)
536
537 private:
538 log4cplus::Logger m_logger;
539
540 };
541
542} //namespace
543
544#include "deviceLcsIf.ipp"
545
546#endif // FCF_DEVMGR_COMMON_DEVICE_LCS_IF_H
Definition dataContext.hpp:86
std::function< void()> m_on_failure
Callback invoked on failure-significant transitions (replaces the old Dispatcher<> failure fan-out).
Definition deviceLcsIf.hpp:466
virtual void InitObject()
Initialize object.
Definition deviceLcsIf.cpp:63
virtual void Disable()
Executes the Disable RPC.
Definition deviceLcsIf.cpp:396
void ExecuteRpc(const std::string &obj, const std::string &proc, std::vector< ifw::fnd::defs::CallArgument > args)
Call an RPC, parse the short reply, throw on non-zero.
Definition deviceLcsIf.cpp:195
virtual void Enable()
Executes the Enable RPC.
Definition deviceLcsIf.cpp:375
virtual bool IsReady() const
Check if controller is in Standby/Ready state.
Definition deviceLcsIf.cpp:476
virtual void Listener(const ifw::fnd::defs::Notification &note)
Callback for listening controller events.
Definition deviceLcsIf.cpp:795
std::function< void()> m_on_normal
Callback invoked on recovery transitions (replaces the old Dispatcher<> normal fan-out).
Definition deviceLcsIf.hpp:472
static std::pair< std::string, std::string > DecodeRpcAddress(const std::string &proc, const std::string &obj_hint="")
Split an FCF '#' RPC address into the OPC UA object + method node ids that the Call service needs.
Definition deviceLcsIf.cpp:167
const elt::configng::CiiConfigInstanceNamespace & GetCfgInstance() const
Definition deviceLcsIf.cpp:728
virtual void Reset()
Executes the Reset RPC.
Definition deviceLcsIf.cpp:417
virtual bool IsDisabling() const
Check if controller is in Disabling state.
Definition deviceLcsIf.cpp:503
int m_state
Actual controller state.
Definition deviceLcsIf.hpp:495
virtual bool IsNotReady() const
Check if controller is in Standby/NotReady state.
Definition deviceLcsIf.cpp:459
bool m_connected
Flag indicating whether the LCS is connected.
Definition deviceLcsIf.hpp:520
std::shared_ptr< IDeviceConfig > m_config
Shared pointer to the device config object.
Definition deviceLcsIf.hpp:445
int m_substate
Actual controller substate.
Definition deviceLcsIf.hpp:500
virtual void Stop()
Executes the Stop RPC.
Definition deviceLcsIf.cpp:438
virtual void StartMonitoring()
Start monitoring of controller attributes.
Definition deviceLcsIf.cpp:620
bool IsConfigLoaded() const
Check if configuration was loaded.
Definition deviceLcsIf.cpp:583
std::string m_lcs_prefix
Store the prefix for storing keys in the database.
Definition deviceLcsIf.hpp:454
ifw::fnd::defs::SubscriptionHandler GetSubscriptionHandler()
Return the subscription handler this object hands to ualib::Client::Subscribe. Test code uses this to...
Definition deviceLcsIf.cpp:587
int ReadErrorCode()
Definition deviceLcsIf.cpp:212
DeviceLcsIf(std::shared_ptr< IDeviceConfig > config, DataContext &data_ctx)
DeviceLcsIf constructor.
Definition deviceLcsIf.cpp:53
std::unordered_map< short, std::string > m_hw_errors
Definition deviceLcsIf.hpp:534
virtual void GetStates(int &state, int &substate)
Get states (state and substate) of the controller.
Definition deviceLcsIf.cpp:520
std::vector< std::string > m_ua_monitor_vector
Definition deviceLcsIf.hpp:532
virtual void RegisterComm(std::shared_ptr< ifw::fnd::defs::ICommAdapter > comm_if, std::function< void()> on_failure, std::function< void()> on_normal)
Register a communication interface.
Definition deviceLcsIf.cpp:99
bool IsConnected() const
Check is the communication was established.
Definition deviceLcsIf.cpp:611
int m_error_code
Actual error code.
Definition deviceLcsIf.hpp:510
void LoadConfig()
Load the YAML configuration.
Definition deviceLcsIf.cpp:119
virtual void Init()
Executes the Init RPC.
Definition deviceLcsIf.cpp:325
virtual void Connect()
Connect to the controller or simulator.
Definition deviceLcsIf.cpp:229
virtual void Disconnect()
Disconnect from the controller of simulator.
Definition deviceLcsIf.cpp:307
virtual std::string GetRpcError(const short error_code) const =0
Get associated message from the RPC error code.
virtual bool IsOperational() const
Check if controller is in Operational.
Definition deviceLcsIf.cpp:492
bool m_config_loaded
Flag indicating whether the configuration was successfully loaded.
Definition deviceLcsIf.hpp:515
std::unordered_map< std::string, short > m_ua_status_map
Definition deviceLcsIf.hpp:528
virtual void ReadStatus(DeviceControllerData &status)
ReadStatus.
Definition deviceLcsIf.cpp:651
std::shared_ptr< ifw::fnd::defs::ICommAdapter > m_comm
Shared pointer to the comm adapter (typically ualib::Client in production; mocked in unit tests).
Definition deviceLcsIf.hpp:460
virtual std::shared_ptr< IDeviceConfig > GetDeviceConfig() const
Get a pointer of device configuration.
Definition deviceLcsIf.cpp:616
void StoreAttribute(const std::string &key, const ifw::fnd::defs::Value &value, int attribute)
Store the updated into the DB.
Definition deviceLcsIf.cpp:732
ifw::fnd::defs::RegistrationToken m_state_token
Keeps the connection-state observer registered for the lifetime of this device.
Definition deviceLcsIf.hpp:490
void StoreUaNames(const std::vector< std::pair< std::string, unsigned int > > &ualist)
StoreUaNames.
Definition deviceLcsIf.cpp:711
ifw::fcf::devmgr::common::DataContext & m_data_ctx
Definition deviceLcsIf.hpp:522
std::unique_ptr< elt::configng::CiiConfigDocument > m_config_doc
Config document for mapping file.
Definition deviceLcsIf.hpp:449
virtual bool IsHwFailure() const
Check if controller is in Hardware Failure.
Definition deviceLcsIf.cpp:509
bool m_local
Actual local flag.
Definition deviceLcsIf.hpp:505
virtual std::string GetHwError(int &error_code, const bool update=false)
Get error message.
Definition deviceLcsIf.cpp:661
@ STAT_LOCAL
Definition deviceLcsIf.hpp:102
@ STAT_HW_STATUS
Definition deviceLcsIf.hpp:104
@ STAT_SUBSTATE
Definition deviceLcsIf.hpp:106
@ STAT_ERROR
Definition deviceLcsIf.hpp:103
@ STAT_STATE
Definition deviceLcsIf.hpp:105
virtual void StopMonitoring()
Stop monitoring of controller attributes.
Definition deviceLcsIf.cpp:643
std::string GetMapValue(const std::string &category, const std::string &key) const
Get mapping value.
Definition deviceLcsIf.cpp:694
ActionMgr class source file.
Definition actionMgr.cpp:28
The DeviceControllerData struct.
Definition deviceLcsIf.hpp:49
virtual ~DeviceControllerData()
Definition deviceLcsIf.cpp:43
void SetData(const DeviceControllerData &data)
Definition deviceLcsIf.cpp:46
DeviceControllerData()
Definition deviceLcsIf.cpp:36