X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altosui%2Flibaltos%2Flibaltos.c;h=f2c8bd8d51eec9705b91a7965835660e5f8d0cf2;hb=578c4b17b8f62f2727654ebda78ee139f9fe13fa;hp=13635a0da0f2d0b4311112c029926eddd6e91831;hpb=8dd455204cf8712fa8c142b0c0517cec1bf5fd0f;p=fw%2Faltos diff --git a/altosui/libaltos/libaltos.c b/altosui/libaltos/libaltos.c index 13635a0d..f2c8bd8d 100644 --- a/altosui/libaltos/libaltos.c +++ b/altosui/libaltos/libaltos.c @@ -20,6 +20,22 @@ #include #include +#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 @@ -768,7 +795,7 @@ get_number(io_object_t object, CFStringRef entry, int *result) } struct altos_list * -altos_list_start(void) +altos_list_start(int time) { struct altos_list *list = calloc (sizeof (struct altos_list), 1); CFMutableDictionaryRef matching_dictionary = IOServiceMatching("IOUSBDevice");