fp@922: /***************************************************************************** fp@922: * fp@922: * $Id$ fp@922: * fp@922: ****************************************************************************/ fp@922: fp@922: #ifndef __EC_MASTER_H__ fp@922: #define __EC_MASTER_H__ fp@922: fp@922: #include fp@956: #include fp@956: #include fp@1105: #include fp@922: using namespace std; fp@922: fp@1055: #include "../include/ecrt.h" fp@935: #include "../master/ioctl.h" fp@935: fp@922: /****************************************************************************/ fp@922: fp@922: class MasterException: fp@922: public runtime_error fp@922: { fp@922: public: fp@922: /** Constructor with std::string parameter. */ fp@922: MasterException( fp@922: const string &s /**< Message. */ fp@922: ): runtime_error(s) {} fp@922: fp@922: /** Constructor with const char pointer parameter. */ fp@922: MasterException( fp@922: const char *s /**< Message. */ fp@922: ): runtime_error(s) {} fp@922: }; fp@922: fp@922: /****************************************************************************/ fp@922: fp@922: class Master fp@922: { fp@922: public: fp@922: Master(); fp@922: ~Master(); fp@922: fp@972: void setIndex(unsigned int); fp@922: fp@1099: enum Verbosity { fp@1099: Quiet, fp@1099: Normal, fp@1099: Verbose fp@1099: }; fp@1099: void setVerbosity(Verbosity); fp@1099: fp@980: void writeAlias(int, bool, const vector &); fp@1099: void showConfigs(); fp@949: void outputData(int); fp@956: void setDebug(const vector &); fp@948: void showDomains(int); fp@957: void showMaster(); fp@1099: void listPdos(int); fp@1099: void listSdos(int); fp@974: void sdoDownload(int, const string &, const vector &); fp@968: void sdoUpload(int, const string &, const vector &); fp@1099: void showSlaves(int); fp@978: void siiRead(int); fp@980: void siiWrite(int, bool, const vector &); fp@960: void requestStates(int, const vector &); fp@938: void generateXml(int); fp@922: fp@922: protected: fp@972: enum Permissions {Read, ReadWrite}; fp@972: void open(Permissions); fp@972: void close(); fp@972: fp@980: void writeSlaveAlias(uint16_t, uint16_t); fp@1105: typedef list ConfigList; fp@1105: void showDetailedConfigs(const ConfigList &); fp@1105: void listConfigs(const ConfigList &); fp@949: void outputDomainData(unsigned int); fp@1101: enum {BreakAfterBytes = 16}; fp@948: void showDomain(unsigned int); fp@1099: void listSlavePdos(uint16_t, bool = false); fp@1099: void listSlaveSdos(uint16_t, bool = false); fp@1065: void listSlaves(int); fp@989: void showSlave(uint16_t); fp@938: void generateSlaveXml(uint16_t); fp@935: unsigned int slaveCount(); fp@957: void getMaster(ec_ioctl_master_t *); fp@990: void getConfig(ec_ioctl_config_t *, unsigned int); fp@1055: void getConfigPdo(ec_ioctl_config_pdo_t *, unsigned int, uint8_t, fp@1055: uint16_t); fp@990: void getConfigPdoEntry(ec_ioctl_config_pdo_entry_t *, unsigned int, fp@1055: uint8_t, uint16_t, uint8_t); fp@990: void getConfigSdo(ec_ioctl_config_sdo_t *, unsigned int, unsigned int); fp@948: void getDomain(ec_ioctl_domain_t *, unsigned int); fp@950: void getFmmu(ec_ioctl_domain_fmmu_t *, unsigned int, unsigned int); fp@1079: void getData(ec_ioctl_domain_data_t *, unsigned int, unsigned int, fp@950: unsigned char *); fp@935: void getSlave(ec_ioctl_slave_t *, uint16_t); fp@1079: void getSync(ec_ioctl_slave_sync_t *, uint16_t, uint8_t); fp@1079: void getPdo(ec_ioctl_slave_sync_pdo_t *, uint16_t, uint8_t, uint8_t); fp@1079: void getPdoEntry(ec_ioctl_slave_sync_pdo_entry_t *, uint16_t, uint8_t, fp@1079: uint8_t, uint8_t); fp@1079: void getSdo(ec_ioctl_slave_sdo_t *, uint16_t, uint16_t); fp@1079: void getSdoEntry(ec_ioctl_slave_sdo_entry_t *, uint16_t, int, uint8_t); fp@960: void requestState(uint16_t, uint8_t); fp@935: fp@935: static string slaveState(uint8_t); fp@968: static void printRawData(const uint8_t *, unsigned int); fp@980: static uint8_t calcSiiCrc(const uint8_t *, unsigned int); fp@922: fp@922: private: fp@974: enum {DefaultBufferSize = 1024}; fp@968: fp@922: unsigned int index; fp@1099: Verbosity verbosity; fp@922: int fd; fp@922: }; fp@922: fp@922: /****************************************************************************/ fp@922: fp@922: #endif