libaltos: fix Mac OS X function signatures
[fw/altos] / altosui / libaltos / libaltos.c
index 13635a0da0f2d0b4311112c029926eddd6e91831..d1f445bd488f14757bf1cb267593df7a5fd95598 100644 (file)
 #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
@@ -543,7 +559,7 @@ altos_list_start(void)
                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;
@@ -582,6 +598,7 @@ altos_list_finish(struct altos_list *usbdevs)
        free(usbdevs);
 }
 
+#if HAS_BLUETOOTH
 struct altos_bt_list {
        inquiry_info    *ii;
        int             sock;
@@ -591,10 +608,9 @@ struct altos_bt_list {
 };
 
 #define INQUIRY_MAX_RSP        255
-#define INQUIRY_LEN    8
 
 struct altos_bt_list *
-altos_bt_list_start(void)
+altos_bt_list_start(int inquiry_time)
 {
        struct altos_bt_list    *bt_list;
 
@@ -614,7 +630,7 @@ altos_bt_list_start(void)
                goto no_sock;
 
        bt_list->num_rsp = hci_inquiry(bt_list->dev_id,
-                                      INQUIRY_LEN,
+                                      inquiry_time,
                                       INQUIRY_MAX_RSP,
                                       NULL,
                                       &bt_list->ii,
@@ -665,6 +681,15 @@ altos_bt_list_finish(struct altos_bt_list *bt_list)
        free(bt_list);
 }
 
+void
+altos_bt_fill_in(char *name, char *addr, struct altos_bt_device *device)
+{
+       strncpy(device->name, name, sizeof (device->name));
+       device->name[sizeof(device->name)-1] = '\0';
+       strncpy(device->addr, addr, sizeof (device->addr));
+       device->addr[sizeof(device->addr)-1] = '\0';
+}
+
 struct altos_file *
 altos_bt_open(struct altos_bt_device *device)
 {
@@ -690,6 +715,7 @@ altos_bt_open(struct altos_bt_device *device)
                perror("connect");
                goto no_link;
        }
+       sleep(1);
 
 #ifdef USE_POLL
        pipe(file->pipe);
@@ -704,6 +730,7 @@ no_sock:
 no_file:
        return NULL;
 }
+#endif /* HAS_BLUETOOTH */
 
 #endif
 
@@ -767,7 +794,7 @@ get_number(io_object_t object, CFStringRef entry, int *result)
        return 0;
 }
 
-struct altos_list *
+PUBLIC struct altos_list *
 altos_list_start(void)
 {
        struct altos_list *list = calloc (sizeof (struct altos_list), 1);
@@ -783,7 +810,7 @@ altos_list_start(void)
        return list;
 }
 
-int
+PUBLIC int
 altos_list_next(struct altos_list *list, struct altos_device *device)
 {
        io_object_t object;
@@ -810,7 +837,7 @@ altos_list_next(struct altos_list *list, struct altos_device *device)
        }
 }
 
-void
+PUBLIC void
 altos_list_finish(struct altos_list *list)
 {
        IOObjectRelease (list->iterator);
@@ -855,7 +882,7 @@ altos_list_start(void)
        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;
        }
@@ -867,13 +894,13 @@ PUBLIC int
 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;
@@ -904,11 +931,11 @@ altos_list_next(struct altos_list *list, struct altos_device *device)
                        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);
@@ -944,12 +971,12 @@ altos_list_next(struct altos_list *list, struct altos_device *device)
                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;
 }
 
@@ -1032,10 +1059,10 @@ altos_fill(struct altos_file *file, int timeout)
 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)) {
@@ -1123,7 +1150,7 @@ altos_free(struct altos_file *file)
        free(file);
 }
 
-int
+PUBLIC int
 altos_putchar(struct altos_file *file, char c)
 {
        int     ret;
@@ -1139,7 +1166,7 @@ altos_putchar(struct altos_file *file, char c)
        return LIBALTOS_SUCCESS;
 }
 
-int
+PUBLIC int
 altos_getchar(struct altos_file *file, int timeout)
 {
        int     ret;