# ble_scan_v0e.py
# Erst ESP32 resetten, dann Programm starten
# Zu Beginn werden Sie aufgefordert, das Advertising auf dem Handy zu starten


# Importe und Konstanten:

from ubluetooth import BLE
from time import sleep
from micropython import const 

_IRQ_SCAN_RESULT = const(5)
_IRQ_SCAN_DONE = const(6)
_ADV_TYP_NAME = const(9)


# Funktionen:

def bt_irq_handler(event, data):
  if event == _IRQ_SCAN_RESULT: 
    print('-----------------------------------------------------------')
    global counter
    counter = counter + 1
    print('packet: ', counter)
    addr_type, addr, adv_type, rssi, adv_data = data # data ist ein Tupel (Adresstyp, Adresse, Verbindungstyp, Signalstärke beim Empfänger, Payload ohne Adresse), vgl. Kapitel 3
    print('addr_type: ', addr_type) # vgl. Kapitel 2
    print('addr: ', [hex(n) for n in addr])
    print('adv_type: ', adv_type) # ADV-Connection-Typ, vgl. Kapitel 3
    print('rssi: ', rssi) # Signalstärke des Empfängers in dBm
    print('adv_data: ', [hex(n) for n in list(bytes(adv_data))]) # Payload (ohne BLE-Adresse) als Liste von Hexadezimalzahlen
    print('')
  elif event == _IRQ_SCAN_DONE: # Scan beendet
    print('-----------------------------------------------------------')      
    print('scan complete')


# Hauptptrogramm:

print('Starten Sie den Advertiser!')
print('Nach 3 Sekunden wird der Scan-Vorgang gestartet...')
sleep(3)
print('BLE-Scan wird gestartet...\n')

counter = 0
bt = BLE() # BLE-Instanz bt erzeugen
bt.active(True) # Bluetooth einschalten
bt.irq(bt_irq_handler) # die Funktion bt_irq zum Eventhandler irq von bt machen

bt.gap_scan(5000, 100000, 25000)
sleep(8)
bt.active(False) # Bluetooth aus
print('Bluetooth deaktiviert')



