Subversion Repositories heizung

Rev

Rev 5 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5 Rev 11
Line 1... Line 1...
1
/*
1
/*
2
 * (C) Copyright 2011 by Andreas Theofilu <andreas@theosys.at>
2
 * (C) Copyright 2011, 2024 by Andreas Theofilu <andreas@theosys.at>
3
 * All rights reserved!
3
 * All rights reserved!
4
 */
4
 */
5
#include <stdio.h>
5
#include <stdio.h>
6
#include <stdlib.h>
6
#include <stdlib.h>
7
#include <errno.h>
7
#include <errno.h>
Line 81... Line 81...
81
	if (serialDev.method && serialDev.fd != -1)
81
	if (serialDev.method && serialDev.fd != -1)
82
	{
82
	{
83
	   close(serialDev.fd);
83
	   close(serialDev.fd);
84
	   serialDev.fd = -1;
84
	   serialDev.fd = -1;
85
	   serialDev.switch_fd = -1;
85
	   serialDev.switch_fd = -1;
86
	   syslog(LOG_INFO,"Successful closed device %s", USBdevice);
86
	   syslog(LOG_DAEMON | LOG_INFO,"Successful closed device %s", USBdevice);
87
	   USBdevice = NULL;
87
	   USBdevice = NULL;
88
	   flag = 1;
88
	   flag = 1;
89
	}
89
	}
90
	else if (serialDev.handle != NULL )
90
	else if (serialDev.handle != NULL )
91
	{
91
	{
92
	   usb_release_interface(serialDev.handle,0);
92
	   usb_release_interface(serialDev.handle,0);
93
	   usb_close(serialDev.handle);
93
	   usb_close(serialDev.handle);
94
	   serialDev.handle = NULL;
94
	   serialDev.handle = NULL;
95
	   serialDev.switch_fd = -1;
95
	   serialDev.switch_fd = -1;
96
	   syslog(LOG_INFO,"Successful closed device %u:%u", serialDev.USB_VID, serialDev.USB_PID);
96
	   syslog(LOG_DAEMON | LOG_INFO,"Successful closed device %u:%u", serialDev.USB_VID, serialDev.USB_PID);
97
	   flag = 1;
97
	   flag = 1;
98
	}
98
	}
99
 
99
 
100
	if (!flag)
100
	if (!flag)
101
	   syslog(LOG_DAEMON,"Error closing serial device for controlling heating!");
101
	   syslog(LOG_DAEMON | LOG_ERR,"Error closing serial device for controlling heating!");
102
 
102
 
103
	return 0;
103
	return 0;
104
}
104
}
105
 
105
 
106
/* 
106
/*
107
   Open the USB connection with the first Garmin device we find.  Eventually,
107
   Open the USB connection with the first Garmin device we find.  Eventually,
108
   I'd like to add the ability to select a particular device.
108
   I'd like to add the ability to select a particular device.
109
*/
109
*/
110
 
110
 
111
int serial_open()
111
int serial_open()
Line 119... Line 119...
119
 
119
 
120
	if (serialDev.method && serialDev.fd == -1)
120
	if (serialDev.method && serialDev.fd == -1)
121
	{
121
	{
122
	   if ((serialDev.fd = open(USBdevice, O_RDWR | O_NDELAY)) == -1)
122
	   if ((serialDev.fd = open(USBdevice, O_RDWR | O_NDELAY)) == -1)
123
	   {
123
	   {
124
	      syslog(LOG_DAEMON, "Error opening device %s: %s", USBdevice, strerror(errno));
124
	      syslog(LOG_DAEMON | LOG_ERR, "Error opening device %s: %s", USBdevice, strerror(errno));
125
	      return 0;
125
	      return 0;
126
	   }
126
	   }
127
 
127
 
128
	   serialDev.switch_fd = serialDev.fd;
128
	   serialDev.switch_fd = serialDev.fd;
129
	   syslog(LOG_INFO, "Successful opened device %s", USBdevice);
129
	   syslog(LOG_DAEMON | LOG_INFO, "Successful opened device %s", USBdevice);
130
	   return 1;
130
	   return 1;
131
	}
131
	}
132
	else if (!serialDev.method && serialDev.handle == NULL)
132
	else if (!serialDev.method && serialDev.handle == NULL)
133
	{
133
	{
134
	   usb_init();
134
	   usb_init();
Line 140... Line 140...
140
	      for (di = bi->devices; di != NULL; di = di->next )
140
	      for (di = bi->devices; di != NULL; di = di->next )
141
	      {
141
	      {
142
	         if (di->descriptor.idVendor  == serialDev.USB_VID &&
142
	         if (di->descriptor.idVendor  == serialDev.USB_VID &&
143
			di->descriptor.idProduct == serialDev.USB_PID)
143
			di->descriptor.idProduct == serialDev.USB_PID)
144
		 {
144
		 {
145
		       syslog(LOG_INFO, "Found VID %04x, PID %04x on %s/%s!",
145
		       syslog(LOG_DAEMON | LOG_INFO, "Found VID %04x, PID %04x on %s/%s!",
146
			di->descriptor.idVendor,
146
			di->descriptor.idVendor,
147
			di->descriptor.idProduct,
147
			di->descriptor.idProduct,
148
			bi->dirname,
148
			bi->dirname,
149
			di->filename);
149
			di->filename);
150
		 }
150
		 }
Line 152... Line 152...
152
		 serialDev.handle = usb_open(di);
152
		 serialDev.handle = usb_open(di);
153
		 serialDev.read_bulk = 0;
153
		 serialDev.read_bulk = 0;
154
 
154
 
155
		 if (serialDev.handle == NULL)
155
		 if (serialDev.handle == NULL)
156
		 {
156
		 {
157
		    syslog(LOG_DAEMON, "usb_open failed: %s!",usb_strerror());
157
		    syslog(LOG_DAEMON | LOG_ERR, "usb_open failed: %s!",usb_strerror());
158
		    return 0;
158
		    return 0;
159
		 }
159
		 }
160
 
160
 
161
		 if (usb_set_configuration(serialDev.handle, 1) < 0)
161
		 if (usb_set_configuration(serialDev.handle, 1) < 0)
162
		 {
162
		 {
163
		    syslog(LOG_DAEMON, "usb_set_configuration failed: %s!",usb_strerror());
163
		    syslog(LOG_DAEMON | LOG_ERR, "usb_set_configuration failed: %s!",usb_strerror());
164
		    return 0;
164
		    return 0;
165
		 }
165
		 }
166
 
166
 
167
		 if (usb_claim_interface(serialDev.handle,0) < 0)
167
		 if (usb_claim_interface(serialDev.handle,0) < 0)
168
		 {
168
		 {
169
		    syslog(LOG_DAEMON, "usb_claim_interface failed: %s!",usb_strerror());
169
		    syslog(LOG_DAEMON | LOG_ERR, "usb_claim_interface failed: %s!",usb_strerror());
170
		    return 0;
170
		    return 0;
171
		 }
171
		 }
172
 
172
 
173
		 for (i = 0; i < di->config->interface->altsetting->bNumEndpoints; i++)
173
		 for (i = 0; i < di->config->interface->altsetting->bNumEndpoints; i++)
174
		 {
174
		 {
Line 201... Line 201...
201
	      if (serialDev.handle != NULL )
201
	      if (serialDev.handle != NULL )
202
		 break;
202
		 break;
203
	   }
203
	   }
204
 
204
 
205
	   if (serialDev.handle == NULL)
205
	   if (serialDev.handle == NULL)
206
	      syslog(LOG_DAEMON, "Couldn't detect any serial device!");
206
	      syslog(LOG_DAEMON | LOG_ERR, "Couldn't detect any serial device!");
207
	}
207
	}
208
 
208
 
209
	return (serialDev.handle != NULL);
209
	return (serialDev.handle != NULL);
210
}
210
}
211
 
211