summaryrefslogtreecommitdiff
path: root/altosui/libaltos/libaltos.h
blob: dd091e51333ceae96ca7a462c4dc24d3207bc426 (plain) (blame)
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
/*
 * Copyright © 2010 Keith Packard <keithp@keithp.com>
 *
 * 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; version 2 of the License.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
 */

#ifndef _LIBALTOS_H_
#define _LIBALTOS_H_

#include <stdlib.h>

#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
# ifndef BUILD_STATIC
#  ifdef BUILD_DLL
#   define PUBLIC __declspec(dllexport)
#  else
#   define PUBLIC __declspec(dllimport)
#  endif
# endif /* BUILD_STATIC */
#endif

#ifndef PUBLIC
# define PUBLIC
#endif

#define HAS_BLUETOOTH	0

#define USB_VENDOR_FSF			0xfffe
#define USB_VENDOR_ALTUSMETRUM		USB_VENDOR_FSF
#define USB_PRODUCT_ALTUSMETRUM		0x000a
#define USB_PRODUCT_TELEMETRUM		0x000b
#define USB_PRODUCT_TELEDONGLE		0x000c
#define USB_PRODUCT_TELETERRA		0x000d
#define USB_PRODUCT_TELEBT		0x000e
#define USB_PRODUCT_ALTUSMETRUM_MIN	0x000a
#define USB_PRODUCT_ALTUSMETRUM_MAX	0x0013

#define USB_IS_ALTUSMETRUM(v,p)	((v) == USB_VENDOR_ALTUSMETRUM && \
		(USB_PRODUCT_ALTUSMETRUM_MIN <= (p) && \
		 (p) <= USB_PRODUCT_ALTUSMETRUM_MAX))

struct altos_device {
	//%immutable;
	int				vendor;
	int				product;
	int				serial;
	char				name[256];
	char				path[256];
	//%mutable;
};

#define BLUETOOTH_PRODUCT_TELEBT	"TeleBT"

struct altos_bt_device {
	//%immutable;
	char				name[256];
	char				addr[20];
	//%mutable;
};

#define LIBALTOS_SUCCESS	0
#define LIBALTOS_ERROR		-1
#define LIBALTOS_TIMEOUT	-2

/* Returns 0 for success, < 0 on error */
PUBLIC int
altos_init(void);

PUBLIC void
altos_fini(void);

PUBLIC struct altos_list *
altos_list_start(void);

/* Returns 1 for success, zero on end of list */
PUBLIC int
altos_list_next(struct altos_list *list, struct altos_device *device);

PUBLIC void
altos_list_finish(struct altos_list *list);

PUBLIC struct altos_file *
altos_open(struct altos_device *device);

PUBLIC void
altos_close(struct altos_file *file);

PUBLIC void
altos_free(struct altos_file *file);

/* Returns < 0 for error */
PUBLIC int
altos_putchar(struct altos_file *file, char c);

/* Returns < 0 for error */
PUBLIC int
altos_flush(struct altos_file *file);

/* Returns < 0 for error or timeout. timeout of 0 == wait forever */
PUBLIC int
altos_getchar(struct altos_file *file, int timeout);

#if HAS_BLUETOOTH

PUBLIC struct altos_bt_list *
altos_bt_list_start(int inquiry_time);

PUBLIC int
altos_bt_list_next(struct altos_bt_list *list, struct altos_bt_device *device);

PUBLIC void
altos_bt_list_finish(struct altos_bt_list *list);

PUBLIC void
altos_bt_fill_in(char *name, char *addr, struct altos_bt_device *device);

PUBLIC struct altos_file *
altos_bt_open(struct altos_bt_device *device);

#endif

#endif /* _LIBALTOS_H_ */