def setUp(self):
        settings = Settings.current()
        self.driver = BLEDriver(
            serial_port=settings.serial_ports[0],
            auto_flash=False,
            baud_rate=settings.baud_rate,
            retransmission_interval=settings.retransmission_interval,
            response_timeout=settings.response_timeout,
            log_severity_level=settings.driver_log_level,
        )
        self.adapter = BLEAdapter(self.driver)
        self.adapter.open()

        if settings.nrf_family == "NRF51":
            self.adapter.driver.ble_enable(
                BLEEnableParams(
                    vs_uuid_count=1,
                    service_changed=0,
                    periph_conn_count=0,
                    central_conn_count=1,
                    central_sec_count=0,
                ))
        elif settings.nrf_family == "NRF52":
            gatt_cfg = BLEConfigConnGatt()
            gatt_cfg.att_mtu = self.adapter.default_mtu
            gatt_cfg.tag = 1
            self.adapter.driver.ble_cfg_set(BLEConfig.conn_gatt, gatt_cfg)
            self.adapter.driver.ble_enable()
    def __init__(self, comport, periph_name, s_conn):
        driver           = BLEDriver(serial_port    = comport,
                                     baud_rate      = 115200)
        adapter          = BLEAdapter(driver)
        self.evt_sync           = EvtSync(['connected', 'disconnected'])
        self.target_device_name = periph_name
        self.target_device_addr = 0
        self.conn_handle        = None
        self.adapter            = adapter
        self.notifications_q    = Queue.Queue()
        self.adapter.observer_register(self)
        self.adapter.driver.observer_register(self)
        self.s_conn = s_conn
        self.adapter.driver.open()
        ble_enable_params = BLEEnableParams(vs_uuid_count      = 10,
                                            service_changed    = False,
                                            periph_conn_count  = 0,
                                            central_conn_count = 1,
                                            central_sec_count  = 1)
        if nrf_sd_ble_api_ver >= 3:
            logger.info("\nBLE: ble_enable with local ATT MTU: {}".format(DFUAdapter.LOCAL_ATT_MTU))
            ble_enable_params.att_mtu = BLE_Serial.LOCAL_ATT_MTU

        self.adapter.driver.ble_enable(ble_enable_params)
        self.adapter.driver.ble_vs_uuid_add(BLE_Serial.BASE_UUID)

        self.connect()
Exemplo n.º 3
0
    def __init__(self, com_port, periph_name, s_conn):
        driver = BLEDriver(serial_port=com_port, baud_rate=1000000)
        adapter = BLEAdapter(driver)
        self.evt_sync = EvtSync(['connected', 'disconnected'])
        self.target_device_name = periph_name
        self.target_device_addr = 0
        self.conn_handle = None
        self.adapter = adapter
        self.notifications_q = queue.Queue()
        self.adapter.observer_register(self)
        self.adapter.driver.observer_register(self)
        self.s_conn = s_conn
        self.adapter.driver.open()

        if nrf_sd_ble_api_ver >= 3:
            logger.info("\nBLE: ble_enable with local ATT MTU: {}".format(DFUAdapter.LOCAL_ATT_MTU))

        gatt_cfg = BLEConfigConnGatt()
        gatt_cfg.att_mtu = self.adapter.default_mtu
        gatt_cfg.tag = CFG_TAG
        self.adapter.driver.ble_cfg_set(BLEConfig.conn_gatt, gatt_cfg)

        self.adapter.driver.ble_enable()
        self.adapter.driver.ble_vs_uuid_add(BleSerial.BASE_UUID)

        self.connect()
Exemplo n.º 4
0
def get_port_by_snr(snr):
    serial_ports = BLEDriver.enum_serial_ports()
    try:
        serial_port = [d.port for d in serial_ports if d.serial_number.lstrip('0') == snr][0]
    except IndexError:
        raise NordicSemiException('board not found')
    return serial_port
Exemplo n.º 5
0
def main(serial_port, address):
    print('Serial port used: {}'.format(serial_port))
    driver = BLEDriver(serial_port=serial_port, auto_flash=True)
    adapter = BLEAdapter(driver)
    collector = Collector(adapter, uuids, address)
    collector.open()
    for i in xrange(CONNECTIONS):
        conn_handle = collector.connect_and_discover()

    fig1.canvas.mpl_connect('button_press_event', onClick)
    anim1 = animation.FuncAnimation(fig1,
                                    animate_acc,
                                    blit=False,
                                    interval=1000,
                                    repeat=True)
    #plt.show()

    anim2 = animation.FuncAnimation(fig2, animate_acc_fft, interval=2000)

    anim3 = animation.FuncAnimation(fig3,
                                    animate_pre,
                                    blit=False,
                                    interval=1000,
                                    repeat=True)

    plt.show()

    while (True):
        pass
Exemplo n.º 6
0
def enumerate_ports():
    descs   = BLEDriver.enum_serial_ports()
    click.echo('Please select connectivity serial port:')
    for i, choice in enumerate(descs):
        click.echo('\t{} : {} - {}'.format(i, choice.port, choice.serial_number))

    index = click.prompt('Enter your choice: ', type=click.IntRange(0, len(descs)))
    return descs[index].port
Exemplo n.º 7
0
def enumerate_ports():
    descs   = BLEDriver.enum_serial_ports()
    if len(descs) == 0:
        return None
    click.echo('Please select connectivity serial port:')
    for i, choice in enumerate(descs):
        click.echo('\t{} : {} - {}'.format(i, choice.port, choice.serial_number))

    index = click.prompt('Enter your choice: ', type=click.IntRange(0, len(descs)))
    return descs[index].port
Exemplo n.º 8
0
 def __init__(self, adapter: str = 'hci0', address_type: str = 'public'):
     """Create new instance of the backend."""
     # super(BluepyBackend, self).__init__(adapter, address_type)
     self._adapter = BLEAdapter(
         BLEDriver(serial_port=adapter,
                   auto_flash=False,
                   baud_rate=1000000,
                   log_severity_level="info"))
     self._adapter.driver.open()
     self._adapter.driver.ble_enable()
     self._connection = None
Exemplo n.º 9
0
def main(serial_port, address):
    print('Serial port used: {}'.format(serial_port))
    driver = BLEDriver(serial_port=serial_port, auto_flash=True)
    adapter = BLEAdapter(driver)
    collector = Collector(adapter, uuids, address)
    collector.open()
    for i in xrange(CONNECTIONS):
        conn_handle = collector.connect_and_discover()

    while (True):
        pass
Exemplo n.º 10
0
def main():
    print('Possible dongles are at:')
    descs = BLEDriver.enum_serial_ports()
    for _, d in enumerate(descs):
        print('  {}: {} Serial Number {}'.format(d.port, d.manufacturer,
                                                 d.serial_number))
    driver = BLEDriver(
        serial_port='COM8',
        auto_flash=True,
    )
    adapter = BLEAdapter(driver)
    collector = BatteryCollector(adapter)
    collector.open()
    conn = collector.connect_and_discover()

    if conn is not None:
        while True:
            pass

    collector.close()
Exemplo n.º 11
0
def main(serial_port):
    print('Serial port used: {}'.format(serial_port))
    driver    = BLEDriver(serial_port=serial_port, auto_flash=True)
    adapter   = BLEAdapter(driver)
    collector = HRCollector(adapter)
    collector.open()
    for i in xrange(CONNECTIONS):
        conn_handle = collector.connect_and_discover()

    time.sleep(30)
    print('Closing')
    collector.close()
Exemplo n.º 12
0
def main(serial_port):
    print('Serial port used: {}'.format(serial_port))
    driver = BLEDriver(serial_port=serial_port, auto_flash=True)
    adapter = BLEAdapter(driver)
    collector = NUSCollector(adapter)
    collector.open()
    for i in xrange(CONNECTIONS):
        conn_handle = collector.connect_and_discover()
    #Call to write_control_point to write test data to target device following successful pairing
    collector.write_control_point(conn_handle, TEST_DATA)
    time.sleep(60)
    print('Closing')
    collector.close()
Exemplo n.º 13
0
    def open(self):
        if self.dfu_adapter:
            raise IllegalStateException('DFU Adapter is already open')

        super(DfuTransportBle, self).open()
        driver = BLEDriver(serial_port=self.serial_port,
                           baud_rate=self.baud_rate)
        adapter = BLEAdapter(driver)
        self.dfu_adapter = DFUAdapter(adapter=adapter)
        self.dfu_adapter.open()
        self.target_device_name, self.target_device_addr = self.dfu_adapter.connect(
            target_device_name=self.target_device_name,
            target_device_addr=self.target_device_addr)
        self.__set_prn()
def main(selected_serial_port):
    print("Serial port used: {}".format(selected_serial_port))
    driver = BLEDriver(serial_port=selected_serial_port,
                       auto_flash=False,
                       baud_rate=1000000)

    adapter = BLEAdapter(driver)
    collector = HRCollector(adapter)
    collector.open()
    conn = collector.connect_and_discover()

    if conn:
        time.sleep(10)

    collector.close()
Exemplo n.º 15
0
def setup_adapter(
    port,
    auto_flash,
    baud_rate,
    retransmission_interval,
    response_timeout,
    driver_log_level,
):
    settings = Settings.current()

    driver = BLEDriver(
        serial_port=port,
        auto_flash=auto_flash,
        baud_rate=baud_rate,
        retransmission_interval=retransmission_interval,
        response_timeout=response_timeout,
        log_severity_level=driver_log_level,
    )

    adapter = BLEAdapter(driver)
    adapter.default_mtu = settings.mtu
    adapter.open()
    if settings.nrf_family == "NRF51":
        adapter.driver.ble_enable(
            BLEEnableParams(
                vs_uuid_count=1,
                service_changed=0,
                periph_conn_count=1,
                central_conn_count=1,
                central_sec_count=0,
            ))
    elif settings.nrf_family == "NRF52":
        gatt_cfg = BLEConfigConnGatt()
        gatt_cfg.att_mtu = adapter.default_mtu
        gatt_cfg.tag = Settings.CFG_TAG
        adapter.driver.ble_cfg_set(BLEConfig.conn_gatt, gatt_cfg)

        if hasattr(settings, "event_length"):
            gap_cfg = BLEConfigConnGap()
            gap_cfg.event_length = settings.event_length
            adapter.driver.ble_cfg_set(BLEConfig.conn_gap, gap_cfg)

        adapter.driver.ble_enable()

    return adapter
Exemplo n.º 16
0
    def test_programming(self):
        settings = Settings.current()

        serial_ports = BLEDriver.enum_serial_ports()

        # Check that from enumeration matches
        # kits provided from settings
        found_ports = list(map(lambda port: port.port, serial_ports))

        for serial_port in settings.serial_ports:
            self.assertIn(serial_port, found_ports)

        for serial_port in serial_ports:
            if serial_port.port in settings.serial_ports:
                serial_number = serial_port.serial_number
                logger.info("%s/%s deleting existing firmware",
                            serial_port.port, serial_number)

                flasher = Flasher(serial_port=serial_port.port)
                flasher.erase()

                self.assertFalse(
                    flasher.fw_check(),
                    "#{} must be programmed because it is erased".format(
                        serial_number),
                )

                flasher.fw_flash()
                logger.info("%s/%s programmed", serial_port.port,
                            serial_number)

                self.assertTrue(
                    flasher.fw_check(),
                    "#{} is programmed, shall not be programmed again".format(
                        serial_number),
                )

                # Try to use the device with leading zeroes in serial number removed
                flasher = Flasher(snr=serial_port.serial_number.lstrip('0'))
                flasher.reset()

                logger.info("%s/%s programmed successfully", serial_port.port,
                            serial_number)
Exemplo n.º 17
0
def main(port):
    descs = BLEDriver.enum_serial_ports()
    print("enum_serial_ports: {} serial ports found".format(len(descs)))
    for i, d in enumerate(descs):
        print("\nSerial port #{}:".format(i))
        print("|")
        print("|-  Port: \"{}\"".format(d.port))
        print("|-  Manufacturer: \"{}\"".format(d.manufacturer))
        print("|-  Serial Number: \"{}\"".format(d.serial_number))
        print("|-  PnP ID: \"{}\"".format(d.pnp_id))
        print("|-  Location ID: \"{}\"".format(d.location_id))
        print("|-  Vendor ID: \"{}\"".format(d.vendor_id))
        print("|_  Product ID: \"{}\"".format(d.product_id))
    if port != None:
        flasher = Flasher(serial_port=port) 
        if flasher.fw_check():
            print("Port \"{}\" already flashed with connectivity firmware".format(port))
        else:
            print("Flashing Port \"{}\"".format(port))
            flasher.fw_flash()
            print("Firmware flashed")
def main(port):
    descs = BLEDriver.enum_serial_ports()
    print("enum_serial_ports: {} serial ports found".format(len(descs)))
    for i, d in enumerate(descs):
        print("\nSerial port #{}:".format(i))
        print("|")
        print("|-  Port: \"{}\"".format(d.port))
        print("|-  Manufacturer: \"{}\"".format(d.manufacturer))
        print("|-  Serial Number: \"{}\"".format(d.serial_number))
        print("|-  PnP ID: \"{}\"".format(d.pnp_id))
        print("|-  Location ID: \"{}\"".format(d.location_id))
        print("|-  Vendor ID: \"{}\"".format(d.vendor_id))
        print("|_  Product ID: \"{}\"".format(d.product_id))
    if port != None:
        flasher = Flasher(serial_port=port)
        if flasher.fw_check():
            print("Port \"{}\" already flashed with connectivity firmware".
                  format(port))
        else:
            print("Flashing Port \"{}\"".format(port))
            flasher.fw_flash()
            print("Firmware flashed")
    def test_open_close(self):
        settings = Settings.current()
        driver = BLEDriver(
            serial_port=settings.serial_ports[0],
            auto_flash=False,
            baud_rate=settings.baud_rate,
            retransmission_interval=settings.retransmission_interval,
            response_timeout=settings.response_timeout,
            log_severity_level=settings.driver_log_level,
        )
        adapter = BLEAdapter(driver)
        central = Central(adapter)

        logger.info("Number of iterations: %s", settings.number_of_iterations)

        for _ in range(0, settings.number_of_iterations):
            adapter.open()

            if settings.nrf_family == "NRF51":
                adapter.driver.ble_enable(
                    BLEEnableParams(
                        vs_uuid_count=1,
                        service_changed=0,
                        periph_conn_count=0,
                        central_conn_count=1,
                        central_sec_count=0,
                    )
                )
            elif settings.nrf_family == "NRF52":
                gatt_cfg = BLEConfigConnGatt()
                gatt_cfg.att_mtu = adapter.default_mtu
                gatt_cfg.tag = 1
                adapter.driver.ble_cfg_set(BLEConfig.conn_gatt, gatt_cfg)
                adapter.driver.ble_enable()

            adapter.driver.ble_gap_scan_start()
            time.sleep(1)
            self.assertTrue(central.adv_received)
            adapter.close()
def main(serial_port, address):
    print('Serial port used: {}'.format(serial_port))
    driver = BLEDriver(serial_port=serial_port, auto_flash=True)
    adapter = BLEAdapter(driver)
    collector = Collector(adapter, uuids, address)
    collector.open()
    for i in xrange(CONNECTIONS):
        conn_handle = collector.connect_and_discover()
    #fig1.canvas.mpl_connect('key_press_event', on_press)
    #ani = animation.FuncAnimation(fig1, animate_acc, interval=300)
    #ani.running = True
    #ani.direction = +1
    fig1.canvas.mpl_connect('button_press_event', onClick)
    anim = animation.FuncAnimation(fig1,
                                   animate_acc,
                                   blit=False,
                                   interval=300,
                                   repeat=True)
    plt.show()

    #ani = animation.FuncAnimation(figure2, animate_acc, interval=300)
    plt.show()
    while (True):
        pass
class BLECommonAPITest(unittest.TestCase):
    def setUp(self):
        settings = Settings.current()
        self.driver = BLEDriver(
            serial_port=settings.serial_ports[0],
            auto_flash=False,
            baud_rate=settings.baud_rate,
            retransmission_interval=settings.retransmission_interval,
            response_timeout=settings.response_timeout,
            log_severity_level=settings.driver_log_level,
        )
        self.adapter = BLEAdapter(self.driver)
        self.adapter.open()

        if settings.nrf_family == "NRF51":
            self.adapter.driver.ble_enable(
                BLEEnableParams(
                    vs_uuid_count=1,
                    service_changed=0,
                    periph_conn_count=0,
                    central_conn_count=1,
                    central_sec_count=0,
                ))
        elif settings.nrf_family == "NRF52":
            gatt_cfg = BLEConfigConnGatt()
            gatt_cfg.att_mtu = self.adapter.default_mtu
            gatt_cfg.tag = 1
            self.adapter.driver.ble_cfg_set(BLEConfig.conn_gatt, gatt_cfg)
            self.adapter.driver.ble_enable()

    def test_ble_vs_uuid_add(self):
        logger.info("Adding BLE_UUID_TYPE_VENDOR_BEGIN")

        data = [
            0x12,
            0x34,
            0x56,
            0x78,
            0xE4,
            0x2F,
            0x42,
            0x98,
            0xD6,
            0x44,
            0xB6,
            0x1B,
            0x00,
            0x00,
            0xDF,
            0xC8,
        ]

        base = BLEUUIDBase(data, driver.BLE_UUID_TYPE_VENDOR_BEGIN)
        self.driver.ble_vs_uuid_add(base)
        self.assertEqual(base.type, driver.BLE_UUID_TYPE_VENDOR_BEGIN)

    def test_ble_version_get(self):
        version = self.adapter.get_version()
        self.assertIsNotNone(version)
        self.assertIsNotNone(version.softdevice_info)
        self.assertIsNotNone(version.subversion_number)
        self.assertIsNotNone(version.version_number)

    def tearDown(self):
        self.adapter.close()
Exemplo n.º 22
0
def main(serial_port):
    print("Serial port used: {}".format(serial_port))
    driver      = BLEDriver(serial_port=serial_port, auto_flash=True)
    observer    = TimeoutObserver()
    adv_data    = BLEAdvData(complete_local_name='Example')

    driver.observer_register(observer)
    driver.open()
    driver.ble_enable()
    driver.ble_gap_adv_data_set(adv_data)
    driver.ble_gap_adv_start()
    observer.wait_for_timeout()

    print("Closing")
    driver.close()
Exemplo n.º 23
0
def main(serial_port):
    print("Serial port used: {}".format(serial_port))
    driver = BLEDriver(serial_port=serial_port, baud_rate=1000000)
    observer = TimeoutObserver()
    adv_data = BLEAdvData(complete_local_name="pc_ble_driver_py")

    driver.observer_register(observer)
    driver.open()
    if config.__conn_ic_id__.upper() == "NRF51":
        driver.ble_enable(
            BLEEnableParams(
                vs_uuid_count=0,
                service_changed=0,
                periph_conn_count=1,
                central_conn_count=0,
                central_sec_count=0,
            )
        )
    elif config.__conn_ic_id__.upper() == "NRF52":
        driver.ble_enable()
    driver.ble_gap_adv_data_set(adv_data)
    driver.ble_gap_adv_start()
    observer.wait_for_timeout()

    print("Closing")
    driver.close()
Exemplo n.º 24
0
        self.adapter.driver.ble_gap_scan_start(scan_params=params)
        try:
            new_conn = self.conn_q.get(timeout=scan_duration)
            print(new_conn)
            self.adapter.service_discovery(new_conn)
            self.adapter.enable_notification(new_conn,
                                             BLEUUID(BLEUUID.Standard.unknown))
            return new_conn
        except Empty:
            print("Nothing found.")
            return None


if __name__ == "__main__":
    logging.basicConfig(level=logging.DEBUG)
    serial_port = "COM7"
    driver = BLEDriver(serial_port=serial_port,
                       auto_flash=False,
                       baud_rate=1000000,
                       log_severity_level="info")
    adapter = BLEAdapter(driver)
    ble_handler = BLEhandler(adapter)

    ble_handler.open()
    conn = ble_handler.connect_and_discover()
    print(conn)

    if conn is not None:
        time.sleep(10)

    ble_handler.close()
Exemplo n.º 25
0
def main(serial_port):
    print("Serial port used: {}".format(serial_port))
    driver = BLEDriver(serial_port=serial_port, auto_flash=True)
    observer = TimeoutObserver()
    adv_data = BLEAdvData(complete_local_name='Example')

    driver.observer_register(observer)
    driver.open()
    driver.ble_enable()
    driver.ble_gap_adv_data_set(adv_data)
    driver.ble_gap_adv_start()
    observer.wait_for_timeout()

    print("Closing")
    driver.close()
Exemplo n.º 26
0
    for i, it in enumerate(item_list):
        print('\t{} : {}'.format(i, it))
    print(' ')

    while True:
        try:
            choice = int(raw_input('Enter your choice: '))
            if ((choice >= 0) and (choice < len(item_list))):
                break
        except Exception:
            pass
        print('\tTry again...')
    return choice


if __name__ == "__main__":
    serial_port = None
    if len(sys.argv) < 2:
        print("Please specify connectivity IC identifier (NRF51, NRF52)")
        exit(1)
    init(sys.argv[1])
    if len(sys.argv) == 3:
        serial_port = sys.argv[2]
    else:
        descs = BLEDriver.enum_serial_ports()
        choices = ['{}: {}'.format(d.port, d.serial_number) for d in descs]
        choice = item_choose(choices)
        serial_port = descs[choice].port
    main(serial_port)
    quit()
    for i, it in enumerate(item_list):
        print('\t{} : {}'.format(i, it))
    print(' ')

    while True:
        try:
            choice = int(raw_input('Enter your choice: '))
            if ((choice >= 0) and (choice < len(item_list))):
                break
        except Exception:
            pass
        print ('\tTry again...')
    return choice


if __name__ == "__main__":
    serial_port = None
    if len(sys.argv) < 2:
        print("Please specify connectivity IC identifier (NRF51, NRF52)")
        exit(1)
    init(sys.argv[1])
    if len(sys.argv) == 3:
        serial_port = sys.argv[2]
    else:
        descs       = BLEDriver.enum_serial_ports()
        choices     = ['{}: {}'.format(d.port, d.serial_number) for d in descs]
        choice      = item_choose(choices)
        serial_port = descs[choice].port
    main(serial_port)
    quit()
Exemplo n.º 28
0
    def scan_for_devices(timeout, adapter) -> List[Tuple[str, str]]:
        """Scan for additional devices.
        Returns a list of all the mac addresses of ble devices found.
        """
        class ScanDriverObserver(BLEDriverObserver):
            def __init__(self):
                super(ScanDriverObserver, self).__init__()
                self.advertised_devices = []

            def on_gap_evt_adv_report(self, ble_driver, conn_handle, peer_addr,
                                      rssi, adv_type, adv_data):
                if BLEAdvData.Types.complete_local_name in adv_data.records:
                    dev_name_list = adv_data.records[
                        BLEAdvData.Types.complete_local_name]

                elif BLEAdvData.Types.short_local_name in adv_data.records:
                    dev_name_list = adv_data.records[
                        BLEAdvData.Types.short_local_name]

                else:
                    return

                dev_name = "".join(chr(e) for e in dev_name_list)
                dev_addr = NrfBackend.mac_bin_to_string(peer_addr.addr)
                self.advertised_devices.append((dev_name, dev_addr))

        observer = ScanDriverObserver()

        driver = BLEDriver(serial_port=adapter,
                           auto_flash=False,
                           baud_rate=1000000,
                           log_severity_level="debug")
        driver.open()
        driver.ble_enable()
        driver.observer_register(observer)
        driver.ble_gap_scan_start(scan_params=BLEGapScanParams(
            interval_ms=200, window_ms=150, timeout_s=timeout))
        sleep(timeout)
        driver.close()

        return list(set(observer.advertised_devices))