error handling on device open improved.

master
Steffen Pohle 3 years ago
parent 5100b26927
commit 1352442ddd

@ -63,8 +63,8 @@ class PosCtl {
void CalibModeAxis(int x, int y); void CalibModeAxis(int x, int y);
void CalibModeFinish(); void CalibModeFinish();
void OutputClose(); int OutputClose();
void OutputOpen(); int OutputOpen();
public: public:
PosCtl(); PosCtl();
~PosCtl() {}; ~PosCtl() {};
@ -95,9 +95,9 @@ class PosCtl {
std::string GetDevice() { return device; }; std::string GetDevice() { return device; };
void Loop (int posx, int posy); void Loop (int posx, int posy);
void OutputWriteValue (int axis, double value); int OutputWriteValue (int axis, double value);
void OutputWriteStop (int axis); int OutputWriteStop (int axis);
void OutputWriteStart (int axis); int OutputWriteStart (int axis);
}; };

@ -606,16 +606,18 @@ void PosCtl::SetDevice (std::string d) {
}; };
void PosCtl::OutputClose() { int PosCtl::OutputClose() {
printf ("%s:%d %s\n", __FILE__, __LINE__, __FUNCTION__); printf ("%s:%d %s\n", __FILE__, __LINE__, __FUNCTION__);
if (device_fd > 0) close(device_fd); if (device_fd > 0) close(device_fd);
device_fd = -1; device_fd = -1;
return 0;
}; };
void PosCtl::OutputOpen() { int PosCtl::OutputOpen() {
printf ("%s:%d %s\n", __FILE__, __LINE__, __FUNCTION__); printf ("%s:%d %s\n", __FILE__, __LINE__, __FUNCTION__);
if (device_fd > 0) return; if (device_fd > 0) return 0;
device_fd = open (device.c_str(), O_RDWR); device_fd = open (device.c_str(), O_RDWR);
if (device_fd < 0) { if (device_fd < 0) {
@ -623,16 +625,18 @@ void PosCtl::OutputOpen() {
device.c_str(), strerror(errno)); device.c_str(), strerror(errno));
errormessage_display ((char *)"window-posctl", (char *)"OutputOpen", errormessage_display ((char *)"window-posctl", (char *)"OutputOpen",
(char*)"%s:%d could not open device:%s Error:%s\n", __FILE__, __LINE__, device.c_str(), strerror(errno)); (char*)"%s:%d could not open device:%s Error:%s\n", __FILE__, __LINE__, device.c_str(), strerror(errno));
return -1;
} }
return 0;
}; };
void PosCtl::OutputWriteValue (int axis, double value) { int PosCtl::OutputWriteValue (int axis, double value) {
char outbuf[255]; char outbuf[255];
ssize_t len; ssize_t len;
printf ("%s:%d %s Axis %d Value:%f\n", __FILE__, __LINE__, __FUNCTION__, axis, value); printf ("%s:%d %s Axis %d Value:%f\n", __FILE__, __LINE__, __FUNCTION__, axis, value);
if (device_fd <= 0) OutputOpen(); if (device_fd <= 0) if (OutputOpen() != 0) return -1;
// //
// save language setting and set to plain C // save language setting and set to plain C
@ -654,21 +658,25 @@ void PosCtl::OutputWriteValue (int axis, double value) {
printf ("%s:%d could not write data to device:%s Error:%s\n", __FILE__, __LINE__, printf ("%s:%d could not write data to device:%s Error:%s\n", __FILE__, __LINE__,
device.c_str(), strerror(errno)); device.c_str(), strerror(errno));
errormessage_display ((char *)"window-posctl", (char *)"OutputWriteValue", errormessage_display ((char *)"window-posctl", (char *)"OutputWriteValue",
"%s:%d could not write data to device:%s Error:%s\n", __FILE__, __LINE__, (char *) "%s:%d could not write data to device:%s Error:%s\n", __FILE__, __LINE__,
device.c_str(), strerror(errno)); device.c_str(), strerror(errno));
} }
return 0;
}; };
void PosCtl::OutputWriteStop (int axis) { int PosCtl::OutputWriteStop (int axis) {
printf ("%s:%d %s Axis %d\n", __FILE__, __LINE__, __FUNCTION__, axis); printf ("%s:%d %s Axis %d\n", __FILE__, __LINE__, __FUNCTION__, axis);
if (device_fd <= 0) OutputOpen(); if (device_fd <= 0) if (OutputOpen() != 0) return -1;
return 0;
} }
void PosCtl::OutputWriteStart (int axis) { int PosCtl::OutputWriteStart (int axis) {
printf ("%s:%d %s Axis %d\n", __FILE__, __LINE__, __FUNCTION__, axis); printf ("%s:%d %s Axis %d\n", __FILE__, __LINE__, __FUNCTION__, axis);
if (device_fd <= 0) OutputOpen(); if (device_fd <= 0) if (OutputOpen() != 0) return -1;
return 0;
} }

Loading…
Cancel
Save