SerCx2 PIO-Receive Transactions
SerCx2 nécessite que tous les pilotes de contrôleur série implémentent la prise en charge des transactions de réception qui utilisent des E/S programmées (PIO). Pour démarrer une transaction PIO-receive, SerCx2 appelle la fonction de rappel d’événement EvtSerCx2PioReceiveReadBuffer du pilote et fournit une mémoire tampon de lecture en tant que paramètre.
Au cours de cet appel, la fonction EvtSerCx2PioReceiveReadBuffer transfère les données à la mémoire tampon de lecture à partir du FIFO de réception dans le matériel du contrôleur série. Ce transfert de données se poursuit jusqu’à ce que la mémoire tampon de lecture soit saturée ou qu’aucune autre donnée ne soit immédiatement disponible à partir du FIFO de réception. À la fin du transfert, la fonction retourne le nombre d’octets qui ont été correctement transférés vers la mémoire tampon de lecture à partir du FICHIER FIFO. Cette fonction n’attend jamais que d’autres données soient reçues.
Création de l’objet PIO-receive
Avant que SerCx2 puisse appeler les fonctions EvtSerCx2PioReceiveXxx** du pilote de contrôleur série, le pilote doit appeler la méthode SerCx2PioReceiveCreate pour inscrire ces fonctions auprès de SerCx2. Cette méthode accepte, comme paramètre d’entrée, un pointeur vers une structure SERCX2_PIO_RECEIVE_CONFIG qui contient des pointeurs vers les fonctions EvtSerCx2PioReceiveXxx** du pilote.
Le pilote est nécessaire pour implémenter les trois fonctions suivantes :
- EvtSerCx2PioReceiveReadBuffer
- EvtSerCx2PioReceiveEnableReadyNotification
- EvtSerCx2PioReceiveCancelReadyNotification
En option, le pilote peut implémenter l’une des fonctions suivantes ou les deux :
La méthode SerCx2PioReceiveCreate crée un objet PIO-receive et fournit au pilote appelant un handle SERCX2PIORECEIVE à cet objet. Les fonctions EvtSerCx2PioReceiveXxx** du pilote prennent toutes ce handle comme premier paramètre. Les méthodes SerCx2 suivantes prennent ce handle comme premier paramètre :
- SerCx2PioReceiveReady
- SerCx2PioReceiveInitializeTransactionComplete
- SerCx2PioReceiveCleanupTransactionComplete
Initialisation matérielle et propre-up
Certains pilotes de contrôleur série peuvent avoir besoin d’initialiser le matériel du contrôleur série au début d’une transaction de réception PIO, ou de propre l’état matériel du contrôleur série à la fin de la transaction.
Si un pilote implémente une fonction de rappel d’événement EvtSerCx2PioReceiveInitializeTransaction , SerCx2 appelle cette fonction pour initialiser le contrôleur série avant l’appel EvtSerCx2PioReceiveReadBuffer qui démarre la transaction. Si elle est implémentée, la fonction EvtSerCx2PioReceiveInitializeTransaction doit appeler la méthode SerCx2PioReceiveInitializeTransactionComplete pour informer SerCx2 lorsque le pilote termine l’initialisation du contrôleur série.
Si le pilote implémente une fonction de rappel d’événement EvtSerCx2PioReceiveCleanupTransaction, SerCx2 appelle cette fonction pour propre l’état matériel après le dernier appel EvtSerCx2PioReceiveReadBuffer dans la transaction. Si elle est implémentée, la fonction EvtSerCx2PioReceiveInitializeTransaction doit appeler la méthode SerCx2PioReceiveCleanupTransactionComplete pour informer SerCx2 lorsque le pilote termine le nettoyage du contrôleur série.
Notifications prêtes
Lorsqu’un appel EvtSerCx2PioReceiveReadBuffer se termine parce qu’aucune donnée supplémentaire n’est immédiatement disponible pour la lecture à partir du FIFO de réception, SerCx2 ne peut pas terminer la transaction PIO-receive tant que le contrôleur série n’a pas reçu plus de données ultérieurement. Dans ce cas, SerCx2 appelle la fonction de rappel d’événement EvtSerCx2PioReceiveEnableReadyNotification pour activer une notification prête. Cette fonction permet généralement de déclencher une interruption lorsqu’un ou plusieurs octets de données sont disponibles pour être lus à partir du FIFO de réception. Si et seulement si cette notification est activée, le pilote du contrôleur série appelle la méthode SerCx2PioReceiveReady pour avertir SerCx2 lorsque le pilote détecte que le FIFO de réception n’est plus vide. En réponse à cette notification, SerCx2 appelle la fonction EvtSerCx2PioReceiveReadBuffer pour lire les données nouvellement reçues.
SerCx2 utilise également des notifications prêtes pour gérer efficacement les délais d’attente pendant la gestion des demandes de lecture qui sont traitées en tant que transactions piO-receive. Pour plus d’informations sur ces délais d’attente, consultez SERIAL_TIMEOUTS.
Si la notification ready est activée lorsque la demande de lecture expire ou est annulée, SerCx2 appelle la fonction de rappel d’événement EvtSerCx2PioReceiveCancelReadyNotification pour annuler la notification en attente. Si cette fonction annule correctement la notification en attente, elle retourne TRUE. La valeur de retour TRUE garantit que le pilote du contrôleur série n’appellera pas SerCx2PioReceiveReady. La valeur de retour FALSE indique que le pilote de contrôleur a déjà appelé ou appellera bientôt SerCx2PioReceiveReady.