File: ibTmo.c

package info (click to toggle)
linux-gpib-user 4.3.7-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,760 kB
  • sloc: ansic: 10,381; perl: 1,120; xml: 375; makefile: 335; yacc: 335; tcl: 308; python: 173; php: 157; lex: 144; sh: 134; lisp: 94
file content (156 lines) | stat: -rw-r--r-- 3,674 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/***************************************************************************
                          lib/ibTmo.c
                             -------------------

    copyright            : (C) 2001,2002,2003 by Frank Mori Hess
    email                : fmhess@users.sourceforge.net
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#include "ib_internal.h"
#include <sys/ioctl.h>

static const int default_ppoll_usec_timeout = 2;

unsigned int timeout_to_usec(enum gpib_timeout timeout)
{
	switch (timeout) {
		default:
		case TNONE:
			return 0;
			break;
		case T10us:
			return 10;
			break;
		case T30us:
			return 30;
			break;
		case T100us:
			return 100;
			break;
		case T300us:
			return 300;
			break;
		case T1ms:
			return 1000;
			break;
		case T3ms:
			return 3000;
			break;
		case T10ms:
			return 10000;
			break;
		case T30ms:
			return 30000;
			break;
		case T100ms:
			return 100000;
			break;
		case T300ms:
			return 300000;
			break;
		case T1s:
			return 1000000;
			break;
		case T3s:
			return 3000000;
			break;
		case T10s:
			return 10000000;
			break;
		case T30s:
			return 30000000;
			break;
		case T100s:
			return 100000000;
			break;
		case T300s:
			return 300000000;
			break;
		case T1000s:
			return 1000000000;
			break;
	}
	return 0;
}

unsigned int ppoll_timeout_to_usec(unsigned int timeout)
{
	if (timeout == 0)
		return default_ppoll_usec_timeout;
	else
		return timeout_to_usec(timeout);
}

unsigned int usec_to_timeout(unsigned int usec)
{
	if (usec == 0) return TNONE;
	else if (usec <= 10) return T10us;
	else if (usec <= 30) return T30us;
	else if (usec <= 100) return T100us;
	else if (usec <= 300) return T300us;
	else if (usec <= 1000) return T1ms;
	else if (usec <= 3000) return T3ms;
	else if (usec <= 10000) return T10ms;
	else if (usec <= 30000) return T30ms;
	else if (usec <= 100000) return T100ms;
	else if (usec <= 300000) return T300ms;
	else if (usec <= 1000000) return T1s;
	else if (usec <= 3000000) return T3s;
	else if (usec <= 10000000) return T10s;
	else if (usec <= 30000000) return T30s;
	else if (usec <= 100000000) return T100s;
	else if (usec <= 300000000) return T300s;
	else if (usec <= 1000000000) return T1000s;

	return TNONE;
}

unsigned int usec_to_ppoll_timeout(unsigned int usec)
{
	if (usec <= default_ppoll_usec_timeout) return 0;
	else return usec_to_timeout(usec);
}

int internal_ibtmo(ibConf_t *conf, int timeout)
{
	if (timeout < TNONE || timeout > T1000s) {
		setIberr(EARG);
		return -1;
	}

	conf->settings.usec_timeout = timeout_to_usec(timeout);

	return 0;
}

int ibtmo(int ud, int v)
{
	ibConf_t *conf;
	int retval;

	conf = general_enter_library(ud, 1, 0);
	if (conf == NULL)
		return general_exit_library(ud, 1, 0, 0, 0, 0, 1);

	retval = internal_ibtmo(conf, v);
	if (retval < 0)
		return general_exit_library(ud, 1, 0, 0, 0, 0, 1);

	return general_exit_library(ud, 0, 0, 0, 0, 0, 1);
}

int set_timeout(const ibBoard_t *board, unsigned int usec_timeout)
{
       return ioctl(board->fileno, IBTMO, &usec_timeout);
}