#include <stdlib.h>
#include <string.h>
+#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))
+
+#define BLUETOOTH_PRODUCT_TELEBT "TeleBT"
+
#define USE_POLL
PUBLIC int
if (USB_IS_ALTUSMETRUM(dev->idVendor, dev->idProduct)) {
if (devs->dev)
devs->dev = realloc(devs->dev,
- devs->ndev + 1 * sizeof (struct usbdev *));
+ (devs->ndev + 1) * sizeof (struct usbdev *));
else
devs->dev = malloc (sizeof (struct usbdev *));
devs->dev[devs->ndev++] = dev;
return 0;
}
-struct altos_list *
-altos_list_start(int time)
+PUBLIC struct altos_list *
+altos_list_start(void)
{
struct altos_list *list = calloc (sizeof (struct altos_list), 1);
CFMutableDictionaryRef matching_dictionary = IOServiceMatching("IOUSBDevice");
return list;
}
-int
+PUBLIC int
altos_list_next(struct altos_list *list, struct altos_device *device)
{
io_object_t object;
}
}
-void
+PUBLIC void
altos_list_finish(struct altos_list *list)
{
IOObjectRelease (list->iterator);
list->dev_info = SetupDiGetClassDevs(NULL, "USB", NULL,
DIGCF_ALLCLASSES|DIGCF_PRESENT);
if (list->dev_info == INVALID_HANDLE_VALUE) {
- printf("SetupDiGetClassDevs failed %d\n", GetLastError());
+ printf("SetupDiGetClassDevs failed %ld\n", GetLastError());
free(list);
return NULL;
}
altos_list_next(struct altos_list *list, struct altos_device *device)
{
SP_DEVINFO_DATA dev_info_data;
- char port[128];
+ BYTE port[128];
DWORD port_len;
char friendlyname[256];
- char symbolic[256];
+ BYTE symbolic[256];
DWORD symbolic_len;
HKEY dev_key;
- int vid, pid;
+ unsigned int vid, pid;
int serial;
HRESULT result;
DWORD friendlyname_type;
continue;
}
vid = pid = serial = 0;
- sscanf(symbolic + sizeof("\\??\\USB#VID_") - 1,
+ sscanf((char *) symbolic + sizeof("\\??\\USB#VID_") - 1,
"%04X", &vid);
- sscanf(symbolic + sizeof("\\??\\USB#VID_XXXX&PID_") - 1,
+ sscanf((char *) symbolic + sizeof("\\??\\USB#VID_XXXX&PID_") - 1,
"%04X", &pid);
- sscanf(symbolic + sizeof("\\??\\USB#VID_XXXX&PID_XXXX#") - 1,
+ sscanf((char *) symbolic + sizeof("\\??\\USB#VID_XXXX&PID_XXXX#") - 1,
"%d", &serial);
if (!USB_IS_ALTUSMETRUM(vid, pid)) {
RegCloseKey(dev_key);
device->serial = serial;
strcpy(device->name, friendlyname);
- strcpy(device->path, port);
+ strcpy(device->path, (char *) port);
return 1;
}
result = GetLastError();
if (result != ERROR_NO_MORE_ITEMS)
- printf ("SetupDiEnumDeviceInfo failed error %d\n", result);
+ printf ("SetupDiEnumDeviceInfo failed error %d\n", (int) result);
return 0;
}
PUBLIC int
altos_flush(struct altos_file *file)
{
- DWORD put;
- char *data = file->out_data;
- char used = file->out_used;
- DWORD ret;
+ DWORD put;
+ unsigned char *data = file->out_data;
+ int used = file->out_used;
+ DWORD ret;
while (used) {
if (!WriteFile(file->handle, data, used, &put, &file->ov_write)) {
free(file);
}
-int
+PUBLIC int
altos_putchar(struct altos_file *file, char c)
{
int ret;
return LIBALTOS_SUCCESS;
}
-int
+PUBLIC int
altos_getchar(struct altos_file *file, int timeout)
{
int ret;