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
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
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