int texas_post(int fd, struct termios *ti) { int dev_id, dd, ret = 0; sleep(1); dev_id = ioctl(fd, HCIUARTGETDEVICE, 0); if (dev_id < 0) { perror("cannot get device id"); return -1; } DPRINTF("\nAdded device hci%d\n", dev_id); dd = hci_open_dev(dev_id); if (dd < 0) { perror("HCI device open failed"); return -1; } if (ioctl(dd, HCIDEVUP, dev_id) < 0 && errno != EALREADY) { fprintf(stderr, "Can't init device hci%d: %s (%d)", dev_id, strerror(errno), errno); hci_close_dev(dd); return -1; } ret = brf_do_script(dd, NULL, ti, NULL); hci_close_dev(dd); return ret; }
int texas_post(int fd, struct termios *ti) { int dev_id, dd, ret = 0; sleep(1); dev_id = ioctl(fd, HCIUARTGETDEVICE, 0); if (dev_id < 0) { perror("cannot get device id"); return -1; } DPRINTF("\nAdded device hci%d\n", dev_id); dd = hci_open_dev(dev_id); if (dd < 0) { perror("HCI device open failed"); return -1; } ret = brf_do_script(dd, ti, NULL); hci_close_dev(dd); return ret; }
int texas_init(int fd, int *speed, struct termios *ti) { struct timespec tm = {0, 50000}; char cmd[4]; unsigned char resp[100]; /* Response */ const char *bts_file; int n; memset(resp,'\0', 100); /* It is possible to get software version with manufacturer specific HCI command HCI_VS_TI_Version_Number. But the only thing you get more is if this is point-to-point or point-to-multipoint module */ /* Get Manufacturer and LMP version */ cmd[0] = HCI_COMMAND_PKT; cmd[1] = 0x01; cmd[2] = 0x10; cmd[3] = 0x00; do { n = write(fd, cmd, 4); if (n < 0) { perror("Failed to write init command (READ_LOCAL_VERSION_INFORMATION)"); return -1; } if (n < 4) { fprintf(stderr, "Wanted to write 4 bytes, could only write %d. Stop\n", n); return -1; } /* Read reply. */ if (read_hci_event(fd, resp, 100) < 0) { perror("Failed to read init response (READ_LOCAL_VERSION_INFORMATION)"); return -1; } /* Wait for command complete event for our Opcode */ } while (resp[4] != cmd[1] && resp[5] != cmd[2]); /* Verify manufacturer */ if (! is_it_texas(resp)) { fprintf(stderr,"ERROR: module's manufacturer is not Texas Instruments\n"); return -1; } fprintf(stderr, "Found a Texas Instruments' chip!\n"); bts_file = get_firmware_name(resp); fprintf(stderr, "Firmware file : %s\n", bts_file); n = brf_do_script(fd, speed, ti, bts_file); nanosleep(&tm, NULL); return n; }