Condividi tramite


Transazioni PIO-Receive SerCx2

SerCx2 richiede che tutti i driver del controller seriale implementino il supporto per le transazioni di ricezione che usano operazioni di I/O programmate. Per avviare una transazione di ricezione PIO, SerCx2 chiama la funzione di callback dell'evento EvtSerCx2PioReceiveReadBuffer del driver e fornisce un buffer di lettura come parametro.

Durante questa chiamata, la funzione EvtSerCx2PioReceiveReadBuffer trasferisce i dati al buffer di lettura dalla ricezione FIFO nell'hardware del controller seriale. Questo trasferimento dei dati continua fino a quando il buffer di lettura non è pieno o non sono immediatamente disponibili dati dalla ricezione FIFO. Al termine del trasferimento, la funzione restituisce il numero di byte trasferiti correttamente al buffer di lettura da FIFO. Questa funzione non attende mai la ricezione di altri dati.

Creazione dell'oggetto PIO-receive

Prima che SerCx2 possa chiamare una delle funzioni EvtSerCx2PioReceiveXxx** del driver seriale, il driver deve chiamare il metodo SerCx2PioReceiveCreate per registrare queste funzioni con SerCx2. Questo metodo accetta, come parametro di input, un puntatore a una struttura SERCX2_PIO_RECEIVE_CONFIG che contiene puntatori alle funzioni EvtSerCx2PioReceiveXxx** del driver.

Il driver è necessario per implementare tutte e tre le funzioni seguenti:

Come opzione, il driver può implementare una o entrambe le funzioni seguenti:

Il metodo SerCx2PioReceiveCreate crea un oggetto di ricezione PIO e fornisce al driver chiamante un handle SERCX2PIORECEIVE per questo oggetto. Le funzioni EvtSerCx2PioReceiveXxx** del driver accettano tutti questo handle come primo parametro. I metodi SerCx2 seguenti accettano questo handle come primo parametro:

Inizializzazione e pulizia dell'hardware

Alcuni driver del controller seriale potrebbero dover inizializzare l'hardware del controller seriale all'inizio di una transazione di ricezione PIO o per pulire lo stato hardware del controller seriale alla fine della transazione.

Se un driver implementa una funzione di callback dell'evento EvtSerCx2PioReceiveInitializeTransaction , SerCx2 chiama questa funzione per inizializzare il controller seriale prima della chiamata EvtSerCx2PioReceiveReadBuffer che avvia la transazione. Se implementato, la funzione EvtSerCx2PioReceiveInitializeTransaction deve chiamare il metodo SerCx2PioReceiveInitializeTransactionComplete per informare SerCx2 al termine dell'inizializzazione del controller seriale.

Se il driver implementa una funzione di callback dell'evento EvtSerCx2PioReceiveCleanupTransaction , SerCx2 chiama questa funzione per pulire lo stato hardware dopo la chiamata evtSerCx2PioReceiveReadBuffer finale nella transazione. Se implementato, la funzione EvtSerCx2PioReceiveInitializeTransaction deve chiamare il metodo SerCx2PioReceiveCleanupTransactionComplete per informare SerCx2 al termine della pulizia del controller seriale.

Notifiche pronte

Quando termina una chiamata EvtSerCx2PioReceiveReadBuffer perché non sono immediatamente disponibili altri dati per la lettura dalla ricezione FIFO, SerCx2 non può completare la transazione di ricezione PIO fino a quando, in un secondo momento, il controller seriale riceve più dati. In questo caso, SerCx2 chiama la funzione di callback dell'evento EvtSerCx2PioReceiveEnableReadyNotification per abilitare una notifica pronta. Questa funzione consente in genere di attivare un'interruzione quando uno o più byte di dati sono disponibili per la lettura dalla ricezione FIFO. Se e solo se questa notifica è abilitata, il driver del controller seriale chiama il metodo SerCx2PioReceiveReady per notificare a SerCx2 quando il driver rileva che la ricezione FIFO non è più vuota. In risposta a questa notifica, SerCx2 chiama la funzione EvtSerCx2PioReceiveReadBuffer per leggere i dati appena ricevuti.

SerCx2 usa inoltre notifiche pronte per gestire in modo efficiente i timeout durante la gestione delle richieste di lettura elaborate come transazioni di ricezione PIO. Per altre informazioni su questi timeout, vedere SERIAL_TIMEOUTS.

Se la notifica pronta è abilitata quando la richiesta di lettura scade o viene annullata, SerCx2 chiama la funzione di callback dell'evento EvtSerCx2PioReceiveCancelReadyNotification per annullare la notifica in sospeso. Se questa funzione annulla correttamente la notifica in sospeso, restituisce TRUE. Un valore restituito true garantisce che il driver del controller seriale non chiamerà SerCx2PioReceiveReady. Un valore restituito FALSE indica che il driver del controller ha già chiamato o chiamerà presto SerCx2PioReceiveReady.