Blame view

hvc.c 1.94 KB
9e9f365e   henyxia   Added HVC interface
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  #include <stdio.h>
  #include <stdlib.h>
  #include <termios.h>
  #include <unistd.h>
  #include <errno.h>
  #include <sys/types.h>
  #include <sys/stat.h>
  #include <fcntl.h>
  #include <strings.h>
  #include <inttypes.h>
  #include "ui.h"
  #include "hvc.h"
  #include "printx.h"
  #include "serial.h"
  
  #define	DEVICE1				"/dev/ttyACM1"
  #define	SPEED				B19200
ac0ae6b0   henyxia   HVC can now use t...
18
  #define HVC_POLLING_TIME	50000
9e9f365e   henyxia   Added HVC interface
19
20
21
22
  #define	WAIT_BEFORE_RETRY	5000
  #define	GET_DEVICE_MODEL	'A'
  #define	DEVICE_MODEL_HVC	'C'
  #define	GET_TEMP			'H'
ac0ae6b0   henyxia   HVC can now use t...
23
24
25
26
  #define	SET_HEAT_ON			'E'
  #define	SET_HEAT_OFF		'G'
  #define	SET_PUMP_ON			'B'
  #define	SET_PUMP_OFF		'D'
9e9f365e   henyxia   Added HVC interface
27
28
29
30
31
32
33
  
  // Globals
  int		hvc_fd = -1;
  bool	hvcStop = false;
  bool	sPump = false;
  bool	sHeat = false;
  struct	termios hvcSaveterm;
ac0ae6b0   henyxia   HVC can now use t...
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
  bool	wHeat = false;
  bool	wPump = false;
  
  void stopHVC()
  {
  	hvcStop = true;
  }
  
  void setPumpWantedState(bool s)
  {
  	wPump = s;
  }
  
  void setHeatWantedState(bool s)
  {
  	wHeat = s;
  }
9e9f365e   henyxia   Added HVC interface
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
  
  bool initHVC()
  {
  	unsigned char data;
  	printx(DEBUG, HVC, "Connecting to interface 1\n");
  	if(init_serial(DEVICE1, SPEED, &hvc_fd, &hvcSaveterm))
  	{
  		printx(DEBUG, HVC, "Connected to an interface\n");
  		sendData(&hvc_fd, GET_DEVICE_MODEL);
  		printx(DEBUG, HVC, "Sended identification request %02x\n", GET_DEVICE_MODEL);
  		data = getData(&hvc_fd);
  		if(data == DEVICE_MODEL_HVC)
  			printx(INFO, HVC, "HVC Arduino connected\n");
  		else
  			printx(DEBUG, HVC, "HVC Arduino not found, response was %02x\n", data);
  	}
  	else
  	{
  		printx(WARNING, HVC, "Unable to connect to such interface\n");
  		return false;
  	}
  
  	return true;
  }
  
  void* processHVC(void* we)
  {
  	uint8_t data;
  
  	while(!hvcStop)
  	{
  		printx(DEBUG, HVC, "Querying data\n");
  		sendData(&hvc_fd, GET_TEMP);
  		data = getData(&hvc_fd);
  		setTemp(data);
  
ac0ae6b0   henyxia   HVC can now use t...
87
88
89
90
91
92
93
94
95
96
97
98
99
100
  		if(wHeat ^ sHeat)
  		{
  			sendData(&hvc_fd, wHeat ? SET_HEAT_ON : SET_HEAT_OFF);
  			sHeat = wHeat;
  			setHeat(sHeat);
  		}
  
  		if(wPump ^ sPump)
  		{
  			sendData(&hvc_fd, wPump ? SET_PUMP_ON : SET_PUMP_OFF);
  			sPump = wPump;
  			setPump(sPump);
  		}
  
9e9f365e   henyxia   Added HVC interface
101
102
103
104
105
  		usleep(HVC_POLLING_TIME);
  	}
  
  	return NULL;
  }