tool/Master.h
changeset 1120 0ae26760c12d
parent 1105 3552b4c46f10
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tool/Master.h	Mon Jul 21 19:29:34 2008 +0000
@@ -0,0 +1,121 @@
+/*****************************************************************************
+ *
+ * $Id$
+ *
+ ****************************************************************************/
+
+#ifndef __EC_MASTER_H__
+#define __EC_MASTER_H__
+
+#include <stdexcept>
+#include <string>
+#include <vector>
+#include <list>
+using namespace std;
+
+#include "../include/ecrt.h"
+#include "../master/ioctl.h"
+
+/****************************************************************************/
+
+class MasterException:
+    public runtime_error
+{
+    public:
+        /** Constructor with std::string parameter. */
+        MasterException(
+                const string &s /**< Message. */
+                ): runtime_error(s) {}
+
+        /** Constructor with const char pointer parameter. */
+        MasterException(
+                const char *s /**< Message. */
+                ): runtime_error(s) {}
+};
+
+/****************************************************************************/
+
+class Master
+{
+    public:
+        Master();
+        ~Master();
+
+        void setIndex(unsigned int);
+
+        enum Verbosity {
+            Quiet,
+            Normal,
+            Verbose
+        };
+        void setVerbosity(Verbosity);
+
+        void writeAlias(int, bool, const vector<string> &);
+        void showConfigs();
+        void outputData(int);
+        void setDebug(const vector<string> &);
+        void showDomains(int);
+        void showMaster();
+        void listPdos(int);
+        void listSdos(int);
+        void sdoDownload(int, const string &, const vector<string> &);
+        void sdoUpload(int, const string &, const vector<string> &);
+        void showSlaves(int);
+        void siiRead(int);
+        void siiWrite(int, bool, const vector<string> &);
+        void requestStates(int, const vector<string> &);
+        void generateXml(int);
+
+    protected:
+        enum Permissions {Read, ReadWrite};
+        void open(Permissions);
+        void close();
+
+        void writeSlaveAlias(uint16_t, uint16_t);
+        typedef list<ec_ioctl_config_t> ConfigList;
+        void showDetailedConfigs(const ConfigList &);
+        void listConfigs(const ConfigList &);
+        void outputDomainData(unsigned int);
+        enum {BreakAfterBytes = 16};
+        void showDomain(unsigned int);
+        void listSlavePdos(uint16_t, bool = false);
+        void listSlaveSdos(uint16_t, bool = false);
+        void listSlaves(int);
+        void showSlave(uint16_t);
+        void generateSlaveXml(uint16_t);
+        unsigned int slaveCount();
+        void getMaster(ec_ioctl_master_t *);
+        void getConfig(ec_ioctl_config_t *, unsigned int);
+        void getConfigPdo(ec_ioctl_config_pdo_t *, unsigned int, uint8_t,
+                uint16_t);
+        void getConfigPdoEntry(ec_ioctl_config_pdo_entry_t *, unsigned int,
+                uint8_t, uint16_t, uint8_t);
+        void getConfigSdo(ec_ioctl_config_sdo_t *, unsigned int, unsigned int);
+        void getDomain(ec_ioctl_domain_t *, unsigned int);
+        void getFmmu(ec_ioctl_domain_fmmu_t *, unsigned int, unsigned int);
+        void getData(ec_ioctl_domain_data_t *, unsigned int, unsigned int,
+                unsigned char *);
+        void getSlave(ec_ioctl_slave_t *, uint16_t);
+        void getSync(ec_ioctl_slave_sync_t *, uint16_t, uint8_t);
+        void getPdo(ec_ioctl_slave_sync_pdo_t *, uint16_t, uint8_t, uint8_t);
+        void getPdoEntry(ec_ioctl_slave_sync_pdo_entry_t *, uint16_t, uint8_t,
+                uint8_t, uint8_t);
+        void getSdo(ec_ioctl_slave_sdo_t *, uint16_t, uint16_t);
+        void getSdoEntry(ec_ioctl_slave_sdo_entry_t *, uint16_t, int, uint8_t);
+        void requestState(uint16_t, uint8_t);
+
+        static string slaveState(uint8_t);
+        static void printRawData(const uint8_t *, unsigned int);
+        static uint8_t calcSiiCrc(const uint8_t *, unsigned int);
+        
+    private:
+        enum {DefaultBufferSize = 1024};
+
+        unsigned int index;
+        Verbosity verbosity;
+        int fd;
+};
+
+/****************************************************************************/
+
+#endif