Example #1
0
def on_adv_report(gap_event):
    global connection_is_in_progress

    address_pointer = gap_event.params.adv_report.peer_addr.addr
    address_list = util.uint8_array_to_list(address_pointer,
                                            BLE_ADDRESS_LENGTH)
    address_string = "".join("{0:02X}".format(byte) for byte in address_list)

    adv_data_pointer = gap_event.params.adv_report.data
    adv_data_length = gap_event.params.adv_report.dlen
    adv_data_list = util.uint8_array_to_list(adv_data_pointer, adv_data_length)

    parsed_data = parse_adv_report(
        ble_driver.BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME, adv_data_list)

    if not parsed_data:
        parsed_data = parse_adv_report(
            ble_driver.BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME, adv_data_list)

    if not parsed_data:
        return

    peer_device_name = "".join(chr(element) for element in parsed_data)

    print "Received advertisment report, address: 0x{}, device_name: {}".format(
        address_string, peer_device_name)

    if peer_device_name != TARGET_DEV_NAME:
        return

    if central_connection_handle != ble_driver.BLE_CONN_HANDLE_INVALID:
        return

    if connection_is_in_progress:
        return

    err_code = ble_driver.sd_ble_gap_connect(
        gap_event.params.adv_report.peer_addr, scan_params, connection_params)

    if err_code != ble_driver.NRF_SUCCESS:
        print "Connection request failed, reason {}".format(err_code)
        return

    connection_is_in_progress = True
Example #2
0
def on_adv_report(gap_event):
    global connection_is_in_progress

    address_pointer = gap_event.params.adv_report.peer_addr.addr
    address_list = util.uint8_array_to_list(address_pointer, BLE_ADDRESS_LENGTH)
    address_string = "".join("{0:02X}".format(byte) for byte in address_list)

    adv_data_pointer = gap_event.params.adv_report.data
    adv_data_length = gap_event.params.adv_report.dlen
    adv_data_list = util.uint8_array_to_list(adv_data_pointer, adv_data_length)

    parsed_data = parse_adv_report(ble_driver.BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME,
                                   adv_data_list)

    if not parsed_data:
        parsed_data = parse_adv_report(ble_driver.BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME,
                                       adv_data_list)

    if not parsed_data:
        return

    peer_device_name = "".join(chr(element) for element in parsed_data)

    print "Received advertisment report, address: 0x{}, device_name: {}".format(
        address_string, peer_device_name)

    if peer_device_name != TARGET_DEV_NAME:
        return

    if central_connection_handle != ble_driver.BLE_CONN_HANDLE_INVALID:
        return

    if connection_is_in_progress:
        return

    err_code = ble_driver.sd_ble_gap_connect(gap_event.params.adv_report.peer_addr,
                                             scan_params,
                                             connection_params)

    if err_code != ble_driver.NRF_SUCCESS:
        print "Connection request failed, reason {}".format(err_code)
        return

    connection_is_in_progress = True
Example #3
0
def on_adv_report(gap_event):
    adv_report = gap_event.params.adv_report

    length = adv_report.dlen
    data = adv_report.data
    data_list = util.uint8_array_to_list(data, length)

    ret_val = parse_adv_report(ble_driver.BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME, data_list, length)
    if ret_val == ble_driver.NRF_ERROR_NOT_FOUND:
        ret_val = parse_adv_report(ble_driver.BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME, data_list, length)

    if ret_val is None:
        print "Received advertisment report (no device name)"
        return

    device_name = "".join(chr(element) for element in ret_val)

    print "Received advertisment report, device_name: {}".format(device_name)

    if device_name not in target_list:
        return

    if peer_count >= max_peer_count:
        print "Max peer count reached"
        return

    peer_addr = adv_report.peer_addr
    ble_address = ble_driver.ble_gap_addr_t()
    ble_address.addr_type = peer_addr.addr_type
    ble_address.addr = peer_addr.addr

    error_code = ble_driver.sd_ble_gap_connect(ble_address, ble_scan_params, ble_conn_params)

    if error_code != ble_driver.NRF_SUCCESS:
        print "Failed to connect. Error code: 0x{0:02X}".format(error_code)
        return