Opzioni di sincronizzazione isochronous per dispositivi IEEE 1394
Lo stack di driver IEEE 1394 supporta determinati tipi di sincronizzazione e filtro durante le operazioni di REQUEST_ISOCH_LISTEN e REQUEST_ISOCH_TALK .
Un driver può avviare il filtro impostando il flag DESCRIPTOR_SYNCH_ON_SY o DESCRIPTOR_SYNCH_ON_TAG nel membro fulFlags della struttura ISOCH_DESCRIPTOR di un buffer. A partire dai dati destinati a tale buffer, il driver del bus rimuove tutti i pacchetti dal flusso di dati che non hanno valori Sy o Tag corrispondenti ai valori Sy o Tag indicati nel descrittore isoch. Questo filtro continua con i buffer che seguono, anche se nessuno dei flag DESCRIPTOR_SYNCH_ON_SY e DESCRIPTOR_SYNCH_ON_TAG vengono impostati nei descrittori isoch di tali buffer.
Se, oltre a impostare i flag di DESCRIPTOR_SYNCH_ON_SY o di DESCRIPTOR_SYNCH_ON_TAG, il driver client imposta anche il flag di DESCRIPTOR_USE_SY_TAG_IN_FIRST, il driver del bus userà il valore Sy o Tag fornito dal driver client nel descrittore isoch per sincronizzare il flusso di dati. In questo caso, il driver del bus elimina tutti i pacchetti di dati finché non riceve uno il cui valore Sy o Tag corrisponde al valore indicato nel descrittore isoch. Dopo aver trovato una corrispondenza, il driver del bus smette di eliminare pacchetti e riprende l'inoltro di tutti i pacchetti al driver client.
Se il controller host lo supporta, un driver client può usare i tempi di ciclo per sincronizzare un flusso di dati isochronous. Un "tempo di ciclo" in questo contesto viene definito dalla struttura CYCLE_TIME . Include un secondo conteggio, CL_SecondCount, che esegue il wrapping ogni 128 secondi, un conteggio del ciclo, CL_CycleCount, che indica il numero di cicli isochronosi trascorsi entro il secondo corrente e un conteggio dei tick di orologio, CL_CycleOffset, che indica il numero di tick dell'orologio IEEE 1394 trascorsi all'interno del ciclo corrente.
Un client può avviare un'operazione di sincronizzazione in un buffer specifico oppure può sincronizzare l'intero flusso di dati in un determinato periodo di tempo.
Per avviare un'operazione di sincronizzazione in un buffer specifico, il driver client deve impostare il flag di DESCRIPTOR_SYNCH_ON_TIME nel membro fulFlags di un descrittore isoch per tale buffer. Deve anche inizializzare il membro CycleTime del descrittore con il tempo di ciclo che verrà usato per sincronizzare il flusso di dati. Dopo aver esaminato il descrittore isoch, il driver del bus avvierà l'operazione di sincronizzazione usando il tempo di ciclo indicato. Il driver del bus elimina tutti i pacchetti che non hanno il tempo di ciclo indicato e riprende la distribuzione di pacchetti una volta trovato un pacchetto con il tempo di ciclo corretto.
Per sincronizzare l'intero flusso di dati in un determinato periodo di ciclo, i driver client devono configurare un canale, in modo che tutte le richieste avviate nel canale sincronizzano automaticamente il flusso di dati usando l'ora del ciclo indicato. In questo modo è possibile attivare la sincronizzazione in base alle impostazioni di tempo del ciclo di un determinato descrittore isoch. Per configurare un canale in questo modo, il driver client deve eseguire due passaggi:
Quando il client alloca un handle di risorse per il canale con una richiesta di REQUEST_ISOCH_ALLOCATE_RESOURCES , deve impostare il flag di RESOURCE_SYNCH_ON_TIME nel membro fulFlags dell'IRB.
Quando il client richiede un'operazione di ascolto o di dialogo in un canale, specifica il tempo di ciclo che verrà usato per sincronizzare il flusso di dati nel membro StartTime dell'IRB. Per altre informazioni sulle richieste di ascolto e parlare, vedere REQUEST_ISOCH_LISTEN e REQUEST_ISOCH_TALK.
Per determinare se il controller host supporta la sincronizzazione nei tempi di ciclo, il driver client deve inviare una richiesta di REQUEST_GET_LOCAL_HOST_INFO al driver del bus, con il membro nLevel dell'IRB impostato su 2. Il driver del bus restituisce una struttura GET_LOCAL_HOST_INFO2 in risposta a questa richiesta. Se il driver del bus imposta il flag di HOST_INFO_SUPPORTS_START_ON_CYCLE nel membro HostCapabilities di GET_LOCAL_HOST_INFO2, questo indica che il controller host supporta la sincronizzazione delle operazioni isocrone usando i tempi di ciclo.