equal
deleted
inserted
replaced
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 /** |