void RS485::openDevice() { try { if(_fileDescriptor->descriptor != -1) closeDevice(); _lockfile = "/var/lock" + _settings->device.substr(_settings->device.find_last_of('/')) + ".lock"; int lockfileDescriptor = open(_lockfile.c_str(), O_WRONLY | O_EXCL | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); if(lockfileDescriptor == -1) { if(errno != EEXIST) { _out.printCritical("Couldn't create lockfile " + _lockfile + ": " + strerror(errno)); return; } int processID = 0; std::ifstream lockfileStream(_lockfile.c_str()); lockfileStream >> processID; if(getpid() != processID && kill(processID, 0) == 0) { _out.printCritical("CRC RS485 device is in use: " + _settings->device); return; } unlink(_lockfile.c_str()); lockfileDescriptor = open(_lockfile.c_str(), O_WRONLY | O_EXCL | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); if(lockfileDescriptor == -1) { _out.printCritical("Couldn't create lockfile " + _lockfile + ": " + strerror(errno)); return; } } dprintf(lockfileDescriptor, "%10i", getpid()); close(lockfileDescriptor); //std::string chmod("chmod 666 " + _lockfile); //system(chmod.c_str()); _fileDescriptor = _bl->fileDescriptorManager.add(open(_settings->device.c_str(), O_RDWR | O_NOCTTY | O_NDELAY )); if(_fileDescriptor->descriptor == -1) { _out.printCritical("Couldn't open CRC RS485 device \"" + _settings->device + "\": " + strerror(errno)); return; } setupDevice(); } catch(const std::exception& ex) { _out.printEx(__FILE__, __LINE__, __PRETTY_FUNCTION__, ex.what()); } catch(BaseLib::Exception& ex) { _out.printEx(__FILE__, __LINE__, __PRETTY_FUNCTION__, ex.what()); } catch(...) { _out.printEx(__FILE__, __LINE__, __PRETTY_FUNCTION__); } }
void TICC1100::openDevice() { try { if(_fileDescriptor->descriptor != -1) closeDevice(); _lockfile = GD::bl->settings.lockFilePath() + "LCK.." + _settings->device.substr(_settings->device.find_last_of('/') + 1); int lockfileDescriptor = open(_lockfile.c_str(), O_WRONLY | O_EXCL | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); if(lockfileDescriptor == -1) { if(errno != EEXIST) { _out.printCritical("Couldn't create lockfile " + _lockfile + ": " + strerror(errno)); return; } int processID = 0; std::ifstream lockfileStream(_lockfile.c_str()); lockfileStream >> processID; if(getpid() != processID && kill(processID, 0) == 0) { _out.printCritical("Rf device is in use: " + _settings->device); return; } unlink(_lockfile.c_str()); lockfileDescriptor = open(_lockfile.c_str(), O_WRONLY | O_EXCL | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); if(lockfileDescriptor == -1) { _out.printCritical("Couldn't create lockfile " + _lockfile + ": " + strerror(errno)); return; } } dprintf(lockfileDescriptor, "%10i", getpid()); close(lockfileDescriptor); _fileDescriptor = _bl->fileDescriptorManager.add(open(_settings->device.c_str(), O_RDWR | O_NONBLOCK)); usleep(1000); if(_fileDescriptor->descriptor == -1) { _out.printCritical("Couldn't open rf device \"" + _settings->device + "\": " + strerror(errno)); return; } setupDevice(); } catch(const std::exception& ex) { _out.printEx(__FILE__, __LINE__, __PRETTY_FUNCTION__, ex.what()); } catch(BaseLib::Exception& ex) { _out.printEx(__FILE__, __LINE__, __PRETTY_FUNCTION__, ex.what()); } catch(...) { _out.printEx(__FILE__, __LINE__, __PRETTY_FUNCTION__); } }