350 likes | 659 Views
Bluetooth. Terza lezione: HCI e L2CAP. Corso Bluetooth. 14-4-2003, 3 ore Bluetooth Phy e Baseband 5-5-2003, 3 ore Baseband LMP 12-5-2003 HCI +L2CAP 20-5-2003 RFCOM, SDP e profili (corso di Rossi). Protocol stack. Applications. TCP/IP. HID. RFCOMM. Control. Data. Audio. L2CAP.
E N D
Bluetooth Terza lezione: HCI e L2CAP
Corso Bluetooth • 14-4-2003, 3 ore Bluetooth Phy e Baseband • 5-5-2003, 3 ore Baseband LMP • 12-5-2003 HCI +L2CAP • 20-5-2003 RFCOM, SDP e profili (corso di Rossi)
Protocol stack Applications TCP/IP HID RFCOMM Control Data Audio L2CAP Software layers LinkManager HW Digitale Link Controller HW Digitale/Analogico Baseband HW Analogico/RF Radio BT device
E.g. RF Comm L2CAP Link manager Baseband Radio Hosted vs. Host-less. E.g. RF Comm L2CAP HCI Bluetooth Host Bluetooth Hostless Device HCI Bluetooth Device Link manager Baseband Radio
Commands Events Data HCI (host controller interface) Bluetooth Host Host Drivers and Applications • Il protocollo HCI trasporta • Comandi • Eventi • Dati ACL (bidirezionale) • Dati SCO (bidirezionale) • Tre Physical transports definiti: • UART • USB • PCMCIA/PCI • Rappresenta un’ interfaccia standard, indipendente dal produttore • Consente di sviluppare facilmente applicazioni senza conoscere nel dettaglio il protocollo Bluetooth HCI driver Bluetooth Host Controller Link Manager Baseband & Link Controller Bluetooth Radio Bluetooth Module
Transport • Interfaccia fisica per connettere l’host all’host controller • Tipicamente seriale: • Piu’ semplice da collegare (meno pin) • Non occorrono throughput elevati • USB: • La piu’ diffusa in ambiente PC, sia interna che esterna • Autoconfigurante, banda sovradimensionata, supporto flusso isocrono • Maggiore complessita’ • UART: • La piu’ usata in applicazioni ‘embedded’ • Non autoconfigurante,banda appena sufficiente, no multiplex • Semplice da programmare • PCMCIA: • Definita ma poco utilizzata
Comandi HCI • Set di comandi con cui l’host richiede i servizi del link manager • Pacchetti HCI spediti dall’ host al dispositivo HC • 6 gruppi di comandi: • Controllo connessione • Politiche di connessione • Controllo dispositivo • Parametri informativi • Parametri di stato • Comandi di test • Circa 100 comandi definiti nelle specifiche 1.1
Eventi HCI • Pacchetti spediti dal dispositivo HC all’ Host • Servono al link manager per notificare all’ host: • Che e’ accaduto un evento significativo a livello locale o remoto. • Per ritornate i parametri di ris • posta ad un comando. • 32 eventi definiti nella v.1.1
Evento ‘command complete’ • Serve per restituire i parametri di risposta ad un comando. • Event code=0x0E • Parametri: • HCI command packets (1Byte): numero di comandi pendenti • Command opcode (2 bytes): Opcode (OGF+OCF) del comando a cui l’evento corrisponde • Return parameters (N bytes): i parametri di risposta al comando
Flusso dati (L2CAP) • Pacchetto max dati HCI dipende dall’ Host controller, solitamente e’ poco meno di un Kbyte • Il link manager opera una segmentazione Comandi Eventi Dati LCH=10 Inizio dati L2CAP Link Manager LCH=01 Continuazione dati LCH=11 LMP_PDU
Connection handle • Parola di 12 bit da 0x000 a 0xEFF (0xF00-0xFFF riservati) • Identifica univocamente ogni singola connessione nel dialogo tra host e dispositivo. • Esiste solo a livello HCI, non ha alcun significato ad altri livelli. • Ad es., un master ha un C.H. per ogni slave
Voce • Interfaccia dedicata PCM • Trasporto HCI
Esempio transazione HCILettura da parte dell’ host del BD_address del dispositivo locale • L’host invia al dispositivo un pacchetto comandi HCI_Read_BD_ADDR • OGF=0x04, OCF=0x0009 • Parametri di richiesta nessuno • Parametri di risposta: stato=1byte,BD_ADD=6 bytes • L’host controller risponde con un pacchetto eventi command_complete • EV code=0x0E • Parametri: pending= 1 byte,opcode=2 bytes, returnpar=7bytes
Richiesta BD_address Comando 16 8 OP Code Length 0 OCF=0x009 OGF=0x04 Evento 8 8 8 16 EV Code Par Length Pending Opcode xxx OGF=0x0009 OCF=0x04 0x0E 0x0A (10) 8 8 x 6 Status BD_ADD 0x00=OK B_A (5) B_A (6) B_A (1) B_A (3) B_A (4) B_A (2)
Controllo connessioni • Comando HCI_Create_Connection(BD_ADDR,Packet_Type,Page_Scan_Repetition_Mode,Page_Scan_Mode,Clock_Offset,Allow_Role_Switch) • Evento Connection Complete(Status,Connection_Handle,BD_ADDR,Link_Type,Encryption_Mode) • Comando HCI_Disconnect(Connection_Handle,Reason) • Evento Disconnection Complete(Status,Connection_Handle, Reason)
Controllo inquiry • Comando HCI_Inquiry (length,Num resp): L’host chiede di fare un inquiry per un tempo ‘length’ e di trovare al massimo ‘Num resp’ unita’. • Evento Inquiry Result (Num_Responses,BD_ADDR[i],Page_Scan_Repetition_Mode[i],Page_Scan_Period_Mode[i],Page_Scan_Mode[i],Class_of_Device[i],Clock_Offset[i]) • Evento Inquiry Complete (Status) • Indica che e’ trascorso il tempo di inquiry specificato.
Connessione (lato slave) • Evento Connection Request (BD_ADDR, Class_of_Device,Link_Type) • Comandi: • HCI_Accept_Connection(BD_ADDR,Role) • HCI_Reject_Connection(BD_ADDR, Reason)
Gestione sicurezza • Comandi: • HCI_Authentication_Requested(Connection_Handle) • HCI_Set_Connection_Encryption(Connection_Handle,Encryption_Enable) • HCI_Link_Key_Request_Reply (BD_ADDR, Link_Key) • HCI_PIN_Code_Request_Reply(BD_ADDR,PIN_Code_Length,PIN_Code) • Eventi • PIN Code Request (BD_ADDR) • Link Key Request (BD_ADDR)
Link Control commands OGF=1 • HCI_Add_SCO_Connection (Connection_Handle,Packet_Type) • Se ha successo ritorna un Connection_complete event • HCI_Change_Connection_Packet_Type(Connection_Handle,Packet_Type) • HCI_Remote_Name_Request(BD_ADDR,Page_Scan_Repetition_Mode,Page_Scan_Mode,Clock_Offset) • HCI_Read_Remote_Supported_Features (Connection_Handle) • HCI_Read_Clock_Offset (Connection_Handle)
Link policy commands (OGF=2) • HCI_Hold_Mode (Connection_Handle,Hold_Mode_Max_Interval,Hold_Mode_Min_Interval) • Sniff mode/Exit sniff, Park mode/ exit park • Role discovery, Switch role • Qos setup (Connection_Handle, Flags, Service_Type,Token_Rate, Peak_Bandwidth, Latency, Delay_Variation)
Host controller & BB, OGF=3 51 comandi per controllare i vari settaggi dell’HC: • Reset • Change/read local name • Set/read timeouts (connessione, page, flush, supervision) • Read/write parametri di page_scan e inquiry_scan • Read/write Class of device locale • Read transmitted power(Conn_handle) • Read/write tabella delle Link keys
Parametri informativi OGF=4 • HCI_Read_Local_Version_Information(Status,HCI Version,HCI Revision,LMP Version,Manufacturer_Name,LMP Subversion) • HCI_Read_Local_Supported_Features • HCI_Read_Buffer_Size (Status,HC_ACL_Data_Packet_Length,HC_SCO_Data_Packet_Length, HC_Total_Num_ACL_Data_Packets, HC_Total_Num_SCO_Data_Packets) • HCI_Read_Country_Code (obsoleto) • HCI_Read_BD_ADDR
Parametri di stato OGF=5 • HCI_Read_Failed_Contact_Counter(Connection_Handle) • Legge il contatore dei pacchetti persi con una particolare connessione) • HCI_Get_Link_Quality • Restituisce un byte 0=pessimo 255=ottimo • HCI_Read_RSSI • Restituisce un byte tra –128dbm e +128dbm
Comandi di test OGF=6 • Read / write loop-back mode
Transmitter host Receiver host Receiver host controller Transmitter host controller HCI Flow control
HCI Flow control /2 • Necessario sia da host a host controller che viceversa • Basato si pacchetti dati HCI • Dipendente dalle dimensioni dei buffers • Soggetto alla latenza del protocollo di trasporto: non sarebbe efficiente uno stop-and-go ad ogni pacchetto • Occorre minimizzare le notifiche del controllo di flusso per non intasare il bus di trasporto
Flow control: Host to Host controller • L’host abilita il controllo di flusso col comando Set_Host_Controller_To_Host_Flow_Control • L’host valuta la grandezza del buffer del H.C. (in pacchetti) col comando Read_Buffer_Size • All’ inizio l’host assume il buffer HC vuoto, inizializza una variabile (B) dei buffers disponibii • Ad ogni pacchetto inviato all’ HC, l’host decrementa B • Se B diventa 0, l’host smette di inviare pacchetti. • Periodicamente, l’HC invia un evento Number Of Completed Packets per notificare i pacchetti correttamente trasmessi • L’host, somma a B il valore dei pacchetti inviati
Macchina a stati Flow control B= buffer size Evento: Trasmessi N pacchetti Inviato pacchetto HCI B= B+N Wait B= B-1 B=0 Stop Evento: Trasmessi N pacchetti
UART transport • Usata soprattuto in applicazioni ‘embedded’ • Richiede un protocollo aggiuntivo di multiplexing per distinguere i 4 flussi • Viene aggiunto un Byte prima di ogni pacchetto HCI: • 0x01= pacchetto comandi • 0x02= pacchetto dati ACL • 0x03= pacchetto dati SCO • 0x04= pacchetto eventi
USB transport • Perfetto in ambiente PC, spesso usato anche internamente su motherboard • Sfrutta il meccanismo delle pipes USB per multiplexare i flussi • Comandi= endpoint 0x00 (Control) • Eventi= endpoint 0x81 (Interrupt) • Dati ACL input = endpoint 0x82 (bulk in) • Dati ACL output=endpoint 0x02 (bulk out) • Dati SCO= endpoints 0x83,0x03 (isoch I/O) • Autoconfigurante: • Class of device =0xE0, subclass=0x01, pcode=0x01