1 /*
2  * This file is part of the libsigrok project.
3  *
4  * Copyright (C) 2012 Bert Vermeulen <bert@biot.com>
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef LIBSIGROK_HARDWARE_FLUKE_DMM_PROTOCOL_H
21 #define LIBSIGROK_HARDWARE_FLUKE_DMM_PROTOCOL_H
22 
23 #define LOG_PREFIX "fluke-dmm"
24 
25 #define FLUKEDMM_BUFSIZE 256
26 
27 /* Always USB-serial, 1ms is plenty. */
28 #define SERIAL_WRITE_TIMEOUT_MS 1
29 
30 /* Supported models */
31 enum {
32 	FLUKE_187 = 1,
33 	FLUKE_189,
34 	FLUKE_287,
35 	FLUKE_190,
36 	FLUKE_289,
37 };
38 
39 /* Supported device profiles */
40 struct flukedmm_profile {
41 	int model;
42 	const char *modelname;
43 	/* How often to poll, in ms. */
44 	int poll_period;
45 	/* If no response received, how long to wait before retrying. */
46 	int timeout;
47 };
48 
49 struct dev_context {
50 	const struct flukedmm_profile *profile;
51 	struct sr_sw_limits limits;
52 
53 	char buf[FLUKEDMM_BUFSIZE];
54 	int buflen;
55 	int64_t cmd_sent_at;
56 	int expect_response;
57 	int meas_type;
58 	int is_relative;
59 	enum sr_mq mq;
60 	enum sr_unit unit;
61 	enum sr_mqflag mqflags;
62 };
63 
64 SR_PRIV int fluke_receive_data(int fd, int revents, void *cb_data);
65 
66 #endif
67