LCOV - code coverage report
Current view: top level - drivers/mdev - mdev_mscb.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 0.0 % 1 0
Test Date: 2025-11-11 10:26:08 Functions: 0.0 % 1 0

            Line data    Source code
       1              : /********************************************************************\
       2              : 
       3              :   Name:         mdev_mscb.h
       4              :   Created by:   Stefan Ritt
       5              : 
       6              :   Contents:     MIDAS device drivers class for MSCB devices
       7              : 
       8              : \********************************************************************/
       9              : 
      10              : #ifndef MDEV_MSCB_H
      11              : #define MDEV_MSCB_H
      12              : 
      13              : #include "mscbxx.h"
      14              : #include "mdev.h"
      15              : 
      16              : struct mscb_var {
      17              :    std::string var;
      18              :    std::string name;
      19              :    int         index;
      20              :    bool        output;
      21              :    std::function<bool(mscb_var, float)> confirm;
      22              :    std::function<float(float)> convert;
      23              :    std::string unit;
      24              :    std::string format;
      25              : 
      26              :    mscb_var(std::string &v, std::string &n, int i, bool o, std::string u, std::string fo)
      27              :       : var(v), name(n), index(i), output(o), confirm(nullptr), convert(nullptr), unit(u), format(fo) {};
      28              :    mscb_var(std::string &n, int i, bool o, std::string u, std::string fo)
      29              :       : var(""), name(n), index(i), output(o), confirm(nullptr), convert(nullptr), unit(u), format(fo) {};
      30              :    mscb_var(std::string &v, std::string &n, int i, bool o, std::function<bool(mscb_var, float)> f, std::string u, std::string fo)
      31              :       : var(v), name(n), index(i), output(o), confirm(f), convert(nullptr), unit(u), format(fo) {};
      32              :    mscb_var(std::string &n, int i, bool o, std::function<bool(mscb_var, float)> f, std::string u, std::string fo)
      33              :       : var(""), name(n), index(i), output(o), confirm(f), convert(nullptr), unit(u), format(fo) {};
      34              :    mscb_var(std::string &v, std::string &n, int i, bool o, std::function<float(float)> f, std::string u, std::string fo)
      35              :            : var(v), name(n), index(i), output(o), confirm(nullptr), convert(f), unit(u), format(fo) {};
      36              :    mscb_var(std::string &n, int i, bool o, std::function<float(float)> f, std::string u, std::string fo)
      37              :            : var(""), name(n), index(i), output(o), confirm(nullptr), convert(f), unit(u), format(fo) {};
      38              : 
      39              : };
      40              : 
      41              : class mscb_node {
      42              : public:
      43              :    std::string  m_device;
      44              :    std::string  m_pwd;
      45              :    int          m_address;
      46              :    bool         m_enabled;
      47              :    midas::mscb* m_mscb;
      48              :    bool         m_group_flag;
      49              : 
      50              :    std::vector<mscb_var> m_mscb_var;
      51              :    std::vector<bool>     m_group;
      52              : 
      53              : public:
      54              :    mscb_node(std::string d, int a, std::string pwd = "", bool e=true) :
      55              :       m_device(d), m_pwd(pwd), m_address(a), m_enabled(e), m_group_flag(false) {};
      56              : 
      57              :    void add_group(void) {
      58              :       m_group.push_back(m_group_flag);
      59              :       m_group_flag = false;
      60              :    }
      61              : 
      62              :    void add_input(std::string var, std::string name, std::string unit = "", std::string format = "") {
      63              :       m_mscb_var.emplace_back(var, name, 0, false, unit, format);
      64              :       add_group();
      65              :    }
      66              : 
      67              :    void add_input(int index, std::string name, std::string unit = "", std::string format = "") {
      68              :       m_mscb_var.emplace_back(name, index, false, unit, format);
      69              :       add_group();
      70              :    }
      71              : 
      72              :    void add_input(std::string var, std::string name, std::function<float(float)> f, std::string unit = "", std::string format = "") {
      73              :       m_mscb_var.emplace_back(var, name, 0, false, f, unit, format);
      74              :       add_group();
      75              :    }
      76              : 
      77              :    void add_input(int index, std::string name, std::function<float(float)> f, std::string unit = "", std::string format = "") {
      78              :       m_mscb_var.emplace_back(name, index, false, f, unit, format);
      79              :       add_group();
      80              :    }
      81              : 
      82              :    void add_output(std::string var, std::string name, std::string unit = "", std::string format = "") {
      83              :       m_mscb_var.emplace_back(var, name, 0, true, unit, format);
      84              :       add_group();
      85              :    }
      86              : 
      87              :    void add_output(int index, std::string name, std::string unit = "", std::string format = "") {
      88              :       m_mscb_var.emplace_back(name, index, true, unit, format);
      89              :       add_group();
      90              :    }
      91              : 
      92              :    void add_output(std::string var, std::string name, std::function<bool(mscb_var, float)> f, std::string unit = "", std::string format = "") {
      93              :       m_mscb_var.emplace_back(var, name, 0, true, f, unit, format);
      94              :       add_group();
      95              :    }
      96              : 
      97              :    void add_output(int index, std::string name, std::function<bool(mscb_var, float)> f, std::string unit = "", std::string format = "") {
      98              :       m_mscb_var.emplace_back(name, index, true, f, unit, format);
      99              :       add_group();
     100              :    }
     101              : 
     102              :    void start_new_group() { m_group_flag = true; }
     103              : 
     104              :    std::vector<bool> get_group() { return m_group; };
     105              : };
     106              : 
     107              : class mdev_mscb : public mdev {
     108              : 
     109              : private:
     110              :    midas::odb m_settings;
     111              :    midas::odb m_variables;
     112              :    midas::odb m_common;
     113              :    int        m_n_variables;
     114              : 
     115              :    std::vector<mscb_node> m_node;
     116              :    std::vector<float>     m_mirror;
     117              :    std::vector<bool>      m_group;
     118              : 
     119              : public:
     120              :    mdev_mscb(std::string equipment_name) :
     121              :       mdev(equipment_name) {};
     122              : 
     123            0 :    ~mdev_mscb(void) {};
     124              : 
     125              :    void add_node(mscb_node n) {
     126              :       m_node.push_back(n);
     127              : 
     128              :       for (auto g : n.get_group())
     129              :          m_group.push_back(g);
     130              :    }
     131              : 
     132              :    midas::mscb *get_mscb_node(int i) { return m_node[i].m_mscb; }
     133              : 
     134              :    void get_all(int i);
     135              : 
     136              :    void odb_setup(void) override;
     137              :    void init(void) override;
     138              :    void exit(void) override;
     139              :    void loop(void) override;
     140              :    int read_event(char *pevent, int off) override;
     141              : };
     142              : 
     143              : #endif // MDEV_MPDC_H
        

Generated by: LCOV version 2.0-1