tools/Master.cpp
changeset 982 861eb2810f56
parent 980 c07dd38243ba
child 983 efb947bd96f3
equal deleted inserted replaced
981:5a2bd04c555c 982:861eb2810f56
    98 
    98 
    99 Master::Master()
    99 Master::Master()
   100 {
   100 {
   101     index = 0;
   101     index = 0;
   102     fd = -1;
   102     fd = -1;
   103     currentPermissions = Read;
       
   104 }
   103 }
   105 
   104 
   106 /****************************************************************************/
   105 /****************************************************************************/
   107 
   106 
   108 Master::~Master()
   107 Master::~Master()
   414         }
   413         }
   415     } else { // no data type specified: fetch from dictionary
   414     } else { // no data type specified: fetch from dictionary
   416         ec_ioctl_sdo_entry_t entry;
   415         ec_ioctl_sdo_entry_t entry;
   417         unsigned int entryByteSize;
   416         unsigned int entryByteSize;
   418 
   417 
   419         open(Read);
   418         open(ReadWrite);
   420 
   419 
   421         try {
   420         try {
   422             getSdoEntry(&entry, slavePosition,
   421             getSdoEntry(&entry, slavePosition,
   423                     data.sdo_index, data.sdo_entry_subindex);
   422                     data.sdo_index, data.sdo_entry_subindex);
   424         } catch (MasterException &e) {
   423         } catch (MasterException &e) {
   867 void Master::open(Permissions perm)
   866 void Master::open(Permissions perm)
   868 {
   867 {
   869     stringstream deviceName;
   868     stringstream deviceName;
   870 
   869 
   871     if (fd != -1) { // already open
   870     if (fd != -1) { // already open
   872         if (currentPermissions < perm) { // more permissions required
   871         return;
   873             close();
       
   874         } else {
       
   875             return;
       
   876         }
       
   877     }
   872     }
   878     
   873     
   879     deviceName << "/dev/EtherCAT" << index;
   874     deviceName << "/dev/EtherCAT" << index;
   880     
   875     
   881     if ((fd = ::open(deviceName.str().c_str(),
   876     if ((fd = ::open(deviceName.str().c_str(),
   883         stringstream err;
   878         stringstream err;
   884         err << "Failed to open master device " << deviceName.str() << ": "
   879         err << "Failed to open master device " << deviceName.str() << ": "
   885             << strerror(errno);
   880             << strerror(errno);
   886         throw MasterException(err.str());
   881         throw MasterException(err.str());
   887     }
   882     }
   888 
       
   889     currentPermissions = perm;
       
   890 }
   883 }
   891 
   884 
   892 /****************************************************************************/
   885 /****************************************************************************/
   893 
   886 
   894 void Master::close()
   887 void Master::close()
   895 {
   888 {
   896     if (fd == -1)
   889     if (fd == -1)
   897         return;
   890         return;
   898 
   891 
   899     ::close(fd);
   892     ::close(fd);
       
   893     fd = -1;
   900 }
   894 }
   901 
   895 
   902 /*****************************************************************************/
   896 /*****************************************************************************/
   903 
   897 
   904 /**
   898 /**